使用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]);
要将道具传递给组件,请使用渲染道具
,还应更改路径以/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的方式,也不是一个好主意。我换了答案。