2016-10-04 92 views
1

我发现这个问题,这说明正是我一直在寻找...通行证对象反应路由器

Pass object through Link in react router

是否有可能通过在react-链接组件传递对象路由器?

喜欢的东西:

<Link to='home' params={{myObj: obj}}> Click </Link> 

以同样的方式,我会从父到子组件通过道具。

如果它不可能实现这个目标的最佳方式是什么: 我有一个React + Flux应用程序,我用一些数据呈现表格。我想要做的是当我点击其中一行时,它会带我到这一行的一些细节组件。该行有我需要的所有数据,所以我认为如果我能够通过链接传递它将会很棒。

另一种选择是传递url中行的id,在details组件中读取它,并通过ID从存储中请求数据。

不知道什么是实现上述的最佳途径......

我同意作者的结论,意思是:不是传递对象,我们应该通过一个ID。然而,我正在努力寻找下一个组件,我应该执行查找,可能在我定义mapDispatchToProps的onload方法中。

但是,我不知道如何从那里访问状态来查看对象是否处于状态,以便我可以从api调用中检索它,如果它不处于状态。这是属于这里还是属于行动?如果是在行动中,我该如何得到它。这似乎是一个非常基本的模式,我错过了一些东西。

回答

0

您可以将其与redux-thunk一起使用,您可以为路由器执行操作。

我的意思是这样

export const boundAllStreams = (nextState, replaceState) => reqStreams(nextState.params.game); 

所以你可以看到我使用PARAMS游戏,并与

export const reqStreams = game => { 

    const promise = new Promise((resolve, reject) => { 
    request 
     .get(`${config.ROOT_URL}/${game}&client_id=${config.API_KEY}`) 
     .end((err, res) => { 
     if (err) { 
      reject(err); 
     } else { 
      resolve(res.body.streams); 
     } 
     }); 
    }); 

    return { 
    type: types.RECEIVE_STREAMS, 
    payload: promise 
    }; 

}; 

这里,这是我的减速器在那里我得到了我的PARAMS从路由器改变状态行动。


在你需要做这样的事情之后,你绑定你的动作并使它成为一个对象。

const boundRouteActions = bindActionCreators(routeActions, store.dispatch); 

最后在路由器中,你可以派遣从反应路由器

 <Route path=":game"> 
     <IndexRoute 
      component={StreamsApp} 
      onEnter={boundRouteActions.boundAllStreams} /> 
    </Route> 

希望能与API的OnEnter的动作,可以帮助你)。我知道我只是向你展示代码,但我敢肯定,可以帮助你想出如何实现这一点;)