将不断变化的属性值设置为子状态变量
Setting a changing prop value to a child state variable
假设我们有两个组件(Parent和Child),基本上我将Parents状态变量发送到子元素的输入元素以进行一些操作。类似…
var Parent = React.createClass({
getInitialState: function() {
return {
name: ''
}
},
handleTextChange: function(e) {
this.setState({
name: e.target.value
})
},
render: function() {
return(
<div>
<input type="text" placeholder="Enter something" onChange={this.handleTextChange} />
<Child name={this.state.name} />
</div>
)
}
});
我的子组件是这样的…
var Child = React.createClass({
getInitialState: function() {
return {
childName: ''
}
},
componentWillReceiveProps: function(nextProps) {
this.setState({
childName: nextProps.name
})
},
handleChildTextChange: function(e) {
this.setState({
childName: e.target.value
})
},
render: function() {
return(
<div>
<input type="text" onChange={this.handleChildTextChange} placeholder={this.props.name} />
<h4>{this.state.childName}</h4>
</div>
)
}
});
基本上我想做三件事
- 我的子组件的childName值最初应该设置为这个值parent的状态变量this.props.name
name
) - 当我的
Child
的输入发生变化时,目标文本应该覆盖我的父的名字(this.props.name) - 如果我的子输入为空,并且我的
Parent
的名字正在改变,则I我想让Child
的组分状态变量childName
等于改变来自父元素的道具(this.props.name)
p。S:我的Child
的组件目标文本不应该更新我的Parent
的状态变量(名称),我的意思是,没有回调作为道具。
我认为你应该只在获得初始状态值时将状态设置为this.props.name,而不是每个componentWillReceiveProps示例。一旦子元素设置了自己的状态,该值只会在子元素中改变,而不会在父元素
中改变。var Child = React.createClass({
getInitialState: function() {
return {
childName: this.props.name,
owned: false
}
},
componentWillReceiveProps: function(nextProps) {
// only do it if the state isn't owned by the child
if (!this.state.owned) {
this.setState({
childName: nextProps.name,
owned: false
});
}
},
handleChildTextChange: function(e) {
this.setState({
childName: e.target.value,
owned: true
});
},
render: function() {
return(
<div>
<input type="text" onChange={this.handleChildTextChange} placeholder={this.props.name} />
<h4>{this.state.childName}</h4>
</div>
)
}
});
var Parent = React.createClass({
getInitialState: function() {
return {
name: ''
}
},
handleTextChange: function(e) {
this.setState({
name: e.target.value
})
},
render: function() {
return(
<div>
<input type="text" placeholder="Enter something" onChange={this.handleTextChange} />
<Child name={this.state.name} />
</div>
)
}
});
ReactDOM.render(<Parent />, document.getElementById('container'));
<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="container">
</div>
相关文章:
- 根据文件内容设置状态
- 设置状态PubSub ReactJS和Rails
- jquery在不触发更改事件的情况下切换设置状态
- Node.js中的垃圾收集作用域-变量将保持设置状态多长时间
- Angular JS-UI路由器页面重载获胜't设置状态
- 在 Dojo 增强网格筛选器栏上设置状态文本
- 反应本机,错误地设置状态中的项目值
- 设置状态 [反应本机] 后无法编辑输入文本
- 如何在 React 中从子组件设置状态
- PassportJS - 动态设置状态以允许在回调时重定向
- 在 $.get 中设置状态
- 如何为嵌套对象设置状态
- React-设置状态并同时获取值
- 道具未设置状态
- 使用React中的循环从JSON数组中获取数据并根据数据设置状态
- React:在设置状态之前启动初始渲染(通过ajax)
- Reactjs:设置状态与复选框:选中或未选中
- 如何在react中设置状态为新数据
- 在SignalR的客户端设置状态变量
- 当抛出错误时,反应本机提取无法设置状态