当前位置: 首页 > 知识库问答 >
问题:

在使用React Router v5和Redux时,无法理解如何将道具传递给组件

上官砚文
2023-03-14

使用react router dom,我需要为多个url使用一个组件,并使用一些道具来更改API调用以获取数据。我不知道如何将这些道具传递给组件。

我正在学习如何通过黑客攻击做出反应,但我已经被困在这上面超过4个小时了。我已经阅读了我能找到的每一篇文章,并访问了许多声称有解决我问题的方法的网站。这里发布的解决方案几乎涵盖了每一篇文章的解决方案(使用渲染)。反应路由器通行道具到路由组件

这是我的相关代码,如果需要,请告诉我还需要添加什么。注意:我遵循了react_on_rails的安装教程,并且一直在构建代码库。

我尝试绕过MediaGridContainer.jsredux连接器文件,直接使用MediaGrid.jsx,但这也不起作用。如果我在MediaG中硬编码范围和class_name,我的API调用工作正常rid.jsx.

HelloWorldApp.jsx

const HelloWorldApp = (props) => (
  <Provider store={configureStore(props)}>
    <Router>
      <Header />
      <Switch>
        <Route path="/about">
          <HelloWorldContainer />
        </Route>
        <Route path="/movies">
          <Movies />
        </Route>
      </Switch>
    </Router>
  </Provider>
);
function Movies() {   return (
      <Switch>
        <Route path="/">
          <MediaGridContainer class_name={"movies"} scope={"popular"} />
        </Route>
        <Route path="/trending" exact={true}>
          <MediaGridContainer class_name="movies" scope="trending" />
        </Route>
        <Route path="/disliked">
          <MediaGridContainer class_name="movies" scope="disliked" />
        </Route>
      </Switch>   
 ); }



MediaGridContainer.js

const mapStateToProps = (state, ownProps = {}) => {
  console.log('ownprops') // state
  console.log(ownProps) // {}
  return {props: ownProps};
}

// Note that we don't export MediaGrid, but the redux "connected" version of it.
export default connect(mapStateToProps, actions)(MediaGrid);

这可能是更相关的代码:

MediaGrid.jsx

function MediaGrid({ props }){

  useEffect(() => {
    // setIsLoading(true);
    loadObjects(props.class_name, props.scope).then(() => {
      // setIsLoading(false);
    });
  }, [dispatch, loadObjects]);

共有1个答案

冉绯辞
2023-03-14

要将道具传递给组件,请使用渲染道具,还应更改路径以/movies开头,否则组件将无法工作。

function Movies() {
  return (
    <Switch>
      <Route
        path="/movies"
        exact
        render={() => (
          <MediaGridContainer class_name="movies" scope="popular" />
        )}
      />

      <Route
        path="/movies/trending"
        render={() => (
          <MediaGridContainer class_name="movies" scope="trending" />
        )}
      />

      <Route
        path="/movies/disliked"
        render={() => (
          <MediaGridContainer class_name="movies" scope="disliked" />
        )}
      />
    </Switch>
  );
}
 类似资料:
  • 问题内容: 一个人如何将没有价值的道具传递给反应成分? 注意-没有为这些道具指定默认道具值。 我似乎找不到关于它的任何引用,但是通过观察这些属性的值(它们在默认情况下会分配给它们)。 问题答案: 编译器将您传递的内容解释为布尔值属性。编写纯HTML时也是如此。没有值的属性被解释为布尔值。由于JSX是用于编写HTML的语法糖,因此具有相同的行为是有道理的。 官方的React文档包含以下内容: 布尔属

  • 我使用的是dev-express中的react-grid库,库中有一个表组件,我们可以向它传递单元格组件,在CustomCell中,我使用的是Material UI中的菜单 在上述情况下,菜单工作良好, 但是我想要传递道具到这个组件,我尝试了以下操作 在这种情况下菜单不工作,我想知道是否有一个替代的方法来实现第二种情况。

  • 问题内容: 我试图找到定义可以以一般方式使用的组件的正确方法: 当然,可以想象并在父组件和子组件之间进行渲染的逻辑。 对于这个问题,这是一个虚拟的实现: 问题是,每当您用于定义包装器组件时,如何将某些属性传递给其所有子组件? 问题答案: 用新道具克隆Children 您可以使用React.Children遍历子级,然后使用React.cloneElement使用新的道具(浅合并)克隆每个元素,例如

  • 我是一个相当新的反应,这是一个我正在努力解决的问题。

  • 问题内容: 我正在尝试找到定义可以以一般方式使用的某些组件的正确方法: 当然,您可以想象并作为该逻辑的示例,在父组件和子组件之间存在一种渲染逻辑。 对于这个问题,这是一个虚拟的实现: 问题是,每当您用于定义包装器组件时,如何将某些属性传递给其所有子组件? 问题答案: Cloning children with new props 您可以使用React.Children遍历子级,然后使用React.

  • 也许有一种方法可以将组件绑定到事件? 在使用React一年多后,在Sebastien Lorber的回答的激励下,我得出结论,将子组件作为参数传递给父母中的函数实际上不是React的方式,也不是一个好主意。我换了答案。