reactjs - React Router 不会将数组作为组件的 prop
问题描述
我正在尝试将一组对象作为道具传递给新路线。但是,每当我通过道具并在浏览器上转到该路线时,我可以(使用 console.log)看到道具中的数组存在,但它是空的。我不知道如何解决这个问题。我已经验证了该数组在作为道具传递之前已填充。
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
routes: []
}
}
addToRoute(record){
let tempRoutes = this.state.routes.slice();
tempRoutes[record.id] = record;
this.setState({
routes: tempRoutes
})
}
render() {
return (
<div>
<Route exact path='/' render={() => <Subapp addToRoute={(record) => this.addToRoute(record)}/>}/>
<Route path={"/record/:id"} render={({match})=><BasicInfo match={match} {...this.state}/>}/>
</div>
);
}
}
解决方案
我不确定您的应用程序哪里出了问题,但是当我尝试重新创建您的问题时,我确实在您的代码中看到了一些明显的部分,这些部分使我的应用程序出错。
<Route exact path='/' render={() => <Subapp addToRoute={(record) => this.addToRoute(record)}/>}/>
这里只需传入this.addToRoute
您在组件中填充参数。
<Route path={"/record/:id"} render={({match})=><BasicInfo match={match} {...this.state}/>}/>
尽可能克制自己不要传递整个状态。相反,请尝试明确定义您需要的道具。如果不这样做,您将来可能会扩展组件中的状态。然后,该州的那些新部分也被传递。此外,显式定义 props 将使您的代码更具可读性。
this.state = {
routes: []
}
addToRoute(record){
let tempRoutes = this.state.routes.slice();
tempRoutes[record.id] = record;
this.setState({
routes: tempRoutes
})
}
这行不通。state
最初是一个数组,而在addToRoute()
您将其转换为一个对象。
因此,您的代码中确实存在一些不一致之处。在尝试重新创建您的问题时,由于这些错误,我无法使代码正常工作。进行一些调整后,它运行。正如你所看到的,我正在传递路线对象,它被填充到<BasicInfo />
. 看看这个 CodeSandBox的工作示例。
让我知道这是否回答了您的问题。
推荐阅读
- php - php的智能高亮功能
- java - 如何创建允许用户从 Java 列表中选择某些元素的弹出菜单?
- java - 如何在 Java 中从另一个包和文件夹导入类?
- ajax - JSF:如何在父元素的复合组件中获取 id
- svelte - 如何在 Svelte 3 中有条件地添加和删除`use:`属性?
- c# - WPF 验证错误消息在字段有效之前不会触发
- java - 从 Firebase 获取数据并同时将其放在那里
- javascript - 如何将 Puppeteer“页面”实例传递给 Mocha 自定义报告?
- wordpress - WP 网站重定向到每个新设备中的订单接收页面
- ios - 在前端集成 Plaid API?