Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 通过react路由器中的链接传递对象_Reactjs_Redux_React Router - Fatal编程技术网

Reactjs 通过react路由器中的链接传递对象

Reactjs 通过react路由器中的链接传递对象,reactjs,redux,react-router,Reactjs,Redux,React Router,我发现了这个问题,它准确地描述了我在寻找什么 是否可以通过react路由器中的链接组件传递对象 比如: 点击 与我将道具从父组件传递到子组件的方式相同 如果不可能,实现这一目标的最佳方式是什么: 我有一个React+Flux应用程序,我用一些数据呈现表格。我试图做的是,当我点击其中一行时,它会带我到此行的一些细节组件。这一行有我需要的所有数据,所以我想如果我能通过Link传递它就太好了 另一个选项是在url中传递行的id,在details组件中读取它,并从存储中请求按id的数据 不确定实现上

我发现了这个问题,它准确地描述了我在寻找什么

是否可以通过react路由器中的链接组件传递对象

比如:

点击
与我将道具从父组件传递到子组件的方式相同

如果不可能,实现这一目标的最佳方式是什么: 我有一个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>

希望能对你有所帮助。我知道我只是向您展示代码,但我相信这可以帮助您了解如何实现此功能;)