javascript - 如何从 REACT 中的另一个同级或导入组件更新同级组件的状态
问题描述
嗨,我最近刚开始学习 ReactJS,一直在玩导入和导出功能,例如这是应用程序的结构,3 个单独的文件父级和 2 个子级;如何将状态从 InputArea 导出到 DisplayArea?
父组件
import React, { Component } from 'react';
import DisplayArea from './DisplayArea';
import InputArea from './InputArea';
class App extends Component {
render() {
return (
<div id="wrapper" className="App">
<DisplayArea />
<InputArea />
</div>
);
}
}
export default App;
子 1 组件
import React, { Component } from 'react';
import InputArea from './InputArea';
class DisplayArea extends Component {
constructor(props){
super(props);
}
render() {
return (
<div className="column">
<div className="col-body">
<div id="preview">{ How to display contents here? }</div>
</div>
</div>
);
}
}
export default DisplayArea;
子 2 组件
import React, { Component } from 'react';
class InputArea extends Component {
constructor(props){
super(props);
this.state = {
content: ''
}
this.handleChange = this.handleChange.bind(this);
}
handleChange(e){
e.preventDefault();
this.setState({
content: e.target.value
})
}
render() {
return (
<div className="column">
<div className="col-body">
<textarea id="editor" placeholder="Enter text here" onChange={this.handleChange}></textarea>
</div>
</div>
);
}
}
export default InputArea;
解决方案
你需要在你的情况下提升你的状态。第二个选项是@Gavin Thomas 在评论中建议的。但是如果没有 Redux,你可以这样做:
const InputArea = (props) => {
const handleChange = (e) => props.handleInputValue(e.target.value);
return (
<div className="column">
<div className="col-body">
<textarea
id="editor"
placeholder="Enter text here"
onChange={handleChange}
></textarea>
</div>
</div>
);
};
const DisplayArea = (props) => (
<div className="column">
<div className="col-body">
<div id="preview">{props.inputValue}</div>
</div>
</div>
);
class App extends React.Component {
state = {
inputValue: "Initial Value",
};
handleInputValue = (inputValue) => this.setState({ inputValue });
render() {
return (
<div id="wrapper" className="App">
<DisplayArea inputValue={this.state.inputValue} />
<InputArea handleInputValue={this.handleInputValue} />
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById("app"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
在这里,我们将输入值状态保存在父组件 App 中。我们将回调函数传递给 InputArea 并使用此回调函数更改父组件的状态。然后我们将此状态传递给我们的 DisplayArea 组件。
推荐阅读
- arrays - 使用对象作为索引时,mongodb如何对文档进行排序?
- javascript - 无限轮播滑块
- canopen - CANopen 禁止定时器的正确操作是什么?
- c++ - 带有抽象类的 C++ 虚拟继承,用于一些数学函数的基本实现
- grpc-java - 谷歌云扳手java客户端使用代理
- javascript - 在滚动或任何其他事件上加载功能
- asp.net-mvc - MVC 在 Razor 页面视图中动态创建 N 个下拉框
- python - 为什么这个 python 代码不翻译单词?
- python-3.x - 只允许将类似列表的对象传递给 isin(),您传递了 [NoneType]
- sql - DB2 SQL - 限制返回的组数