【发布时间】:2018-02-19 19:22:38
【问题描述】:
我正在尝试让 App(组件)调用 Main(函数),而 Main(函数)又调用 Leads(组件),我希望道具跟随。 Main 是为我的应用返回所有路由的函数。我正在使用 React Router v4。
我已经尽可能地简化了下面的代码,希望不会太多:
App 调用 Main 并传递 props:leads & library。
App.js
class App extends Component {
render() {
return (
<div>
<nav>
<Link to="/library">Library</Link>
<Link to="/leads">Leads</Link>
</nav>
<Main
leads={this.state.leads}
library={this.state.library}
/>
</div>
);
}
}
export default App;
这里有道具,没问题。然而,我的理解是 props 是函数 Main 的局部变量,因此指向它是问题,因为一旦函数运行,props 就会被破坏。
Main.js (简体)
const Main = (props) => (
<main>
<Switch>
<Route exact path="/leads" render={(props) => (
<Lead
{...props}
leads={props.leads}
/> )}
/>
</Switch>
</main>
)
export default Main;
这里,Leads.js 中的 this.props.leads 指向 null 并且 {Object.keys(this.props.leads)} 失败。 (为简单起见,我删除了 renderLeads() 的代码)
Leads.js (简化版)
class Lead extends React.Component {
render() {
return (
<div>
<h2>Leads</h2>
<table>
<tbody>
{Object.keys(
this.props.leads).map(
this.renderLeads)}
</tbody>
</table>
</div>
);
}
}
export default Lead;
我已经通过将 Main 设置为 React.Component 的扩展类来“解决”这个问题。我仍然觉得 Main 应该是一个函数,它只处理数据而不保存自己的数据......
- Main 应该是一个函数吗?
- 我对情况的评估准确吗?
- 将道具从 Main 传递到 Leads 的正确方法是什么?
提前致谢。
【问题讨论】:
标签: javascript reactjs ecmascript-6 react-router