gpt4 book ai didi

Reactjs - 将状态值从一个组件传递到另一个组件

转载 作者:行者123 更新时间:2023-12-03 13:16:45 26 4
gpt4 key购买 nike

我有两个组件 SideNav 和 Dashboard (两个组件位于不同的 js 文件中)。 SideNav 将有选择框作为过滤器。我必须将一个数组从仪表板组件传递到侧边栏组件。该数组必须作为选择框(位于 sidenav 组件内部)的值给出。

P.S. 如果我在两个不同的 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>

最佳答案

如果您必须将状态从仪表板传递到侧边栏,则必须从仪表板的渲染函数渲染侧边栏。在这里,您可以将 Dashboard 的状态传递到 Sidebar。

代码片段

class Dashboard extends Component {
...
...
render(){
return(
<Sidebar data={this.state.data1}/>
);
}
}

如果您希望 Dashboard 接收对传递到 Sidebar 的 props (data1) 所做的更改,则需要提升状态。即,您必须将函数引用从仪表板传递到侧边栏。在侧栏中,每当您希望将 data1 传递回仪表板时,您都必须调用它。代码片段。

class Dashboard extends Component {
constructor(props){
...
//following is not required if u are using => functions in ES6.
this.onData1Changed = this.onData1Changed.bind(this);
}
...
...
onData1Changed(newData1){
this.setState({data1 : newData1}, ()=>{
console.log('Data 1 changed by Sidebar');
})
}

render(){
return(
<Sidebar data={this.state.data1} onData1Changed={this.onData1Changed}/>
);
}
}

class Sidebar extends Component {
...
//whenever data1 change needs to be sent to Dashboard
//note: data1 is a variable available with the changed data
this.props.onData1changed(data1);
}

引用文档:https://facebook.github.io/react/docs/lifting-state-up.html

关于Reactjs - 将状态值从一个组件传递到另一个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46426078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com