Reactjs 通过react路由器中的链接传递对象
我发现了这个问题,它准确地描述了我在寻找什么 是否可以通过react路由器中的链接组件传递对象 比如:Reactjs 通过react路由器中的链接传递对象,reactjs,redux,react-router,Reactjs,Redux,React Router,我发现了这个问题,它准确地描述了我在寻找什么 是否可以通过react路由器中的链接组件传递对象 比如: 点击 与我将道具从父组件传递到子组件的方式相同 如果不可能,实现这一目标的最佳方式是什么: 我有一个React+Flux应用程序,我用一些数据呈现表格。我试图做的是,当我点击其中一行时,它会带我到此行的一些细节组件。这一行有我需要的所有数据,所以我想如果我能通过Link传递它就太好了 另一个选项是在url中传递行的id,在details组件中读取它,并从存储中请求按id的数据 不确定实现上
点击
与我将道具从父组件传递到子组件的方式相同
如果不可能,实现这一目标的最佳方式是什么:
我有一个React+Flux应用程序,我用一些数据呈现表格。我试图做的是,当我点击其中一行时,它会带我到此行的一些细节组件。这一行有我需要的所有数据,所以我想如果我能通过Link传递它就太好了
另一个选项是在url中传递行的id,在details组件中读取它,并从存储中请求按id的数据
不确定实现上述目标的最佳方式是什么
我同意作者的结论,意思是:我们应该传递一个id,而不是传递一个对象。然而,我正在努力寻找下一个组件上应该执行该查找的位置,可能是在定义mapDispatchToProps的onload方法中
但是,我不知道如何从那里访问状态,以查看对象是否处于该状态,这样,如果它不处于该状态,我就可以从api调用中检索它。这是属于这里还是属于行动?如果是在行动中,我如何才能做到这一点。这似乎是一个非常基本的模式,我遗漏了一些东西。您可以将其与一起使用,然后对路由器执行操作
我的意思是这样的
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
};
};
这是我的减速器,我从路由器操作中得到了参数
在您需要执行类似的操作之后,您将绑定您的操作并使其成为对象
const boundRouteActions = bindActionCreators(routeActions, store.dispatch);
最后,在路由器中,您可以使用react router的Oneter api来调度操作
<Route path=":game">
<IndexRoute
component={StreamsApp}
onEnter={boundRouteActions.boundAllStreams} />
</Route>
希望能对你有所帮助。我知道我只是向您展示代码,但我相信这可以帮助您了解如何实现此功能;) 与一起使用,您可以对路由器执行操作
我的意思是这样的
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
};
};
这是我的减速器,我从路由器操作中得到了参数
在您需要执行类似的操作之后,您将绑定您的操作并使其成为对象
const boundRouteActions = bindActionCreators(routeActions, store.dispatch);
最后,在路由器中,您可以使用react router的Oneter api来调度操作
<Route path=":game">
<IndexRoute
component={StreamsApp}
onEnter={boundRouteActions.boundAllStreams} />
</Route>
希望能对你有所帮助。我知道我只是向您展示代码,但我相信这可以帮助您了解如何实现此功能;)