我有两个组件 SideNav 和 Dashboard(两个在不同的 js 文件中)。 SideNav 将选择框作为过滤器。我必须将一个数组从仪表板组件传递到侧边栏组件。该数组必须作为选择框的值(位于 sidenav 组件内)。
PS 如果我在两个不同的 JS 文件中定义了两个不同的组件类会怎样。例如 HomeComponent/Home.js -> 父组件 Dashboard/Dashboard.js -> 子组件 我正在对“Home.js”文件进行 API 调用并获取一些数据。我想将这些数据传递给“Dashboard.js”文件(组件) 我研究的所有示例,它们在同一个 JS 文件中显示了两个组件。
class Dashboard extends Component {
constructor(props) {
super(props);
this.state = {viz:{},filterData:{}};
}
var data1= ['1','2','3'];
this.setState({data1: data1}, function () {
console.log(this.state.data1);
});
}
//Sidebar
class Sidebar extends Component {
constructor(props) {
super(props);
this.state = {
data: ['opt1','opt2']
};
}
handleClick(e) {
e.preventDefault();
e.target.parentElement.classList.toggle('open');
this.setState({data: this.state.data1}, function () {
console.log(this.state.data);
});
}
render() {
const props = this.props;
const handleClick = this.handleClick;
return (
<div className="sidebar">
<nav className="sidebar-nav">
<Nav>
<li className="nav-item nav-dropdown">
<p className="nav-link nav-dropdown-toggle" onClick={handleClick.bind(this)}>Global</p>
<ul className="nav-dropdown-items">
<li> Organization <br/>
<select className="form-control">
<option value="">Select </option>
{this.state.data.map(function (option,key) {
return <option key={key}>{option}</option>;
})}
</select>
原文由 sudhashree 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果必须将状态从 Dashboard 传递到 Sidebar,则必须从 Dashboard 的渲染函数渲染 Sidebar。在这里,您可以将 Dashboard 的状态传递给 Sidebar。
代码片段
如果您希望 Dashboard 接收对传递给 Sidebar 的 props (data1) 所做的更改,则需要提升状态。即,您必须将函数引用从仪表板传递到侧边栏。在 Sidebar 中,您必须在希望将 data1 传递回 Dashboard 时调用它。代码片段。
参考文档: https ://facebook.github.io/react/docs/lifting-state-up.html