如何在不将状态传递给子组件的情况下更新状态
How to update state without passing it to child component
这是我当前的React.js代码的一个稍微简化的例子。
https://jsfiddle.net/69z2wepo/14668/var Main = React.createClass({
getInitialState: function(){
return {
showText: false
}
},
handleClick: function(){
this.setState({
showText: true
})
},
render: function() {
return (
<div>
<button onClick={this.handleClick}>Press me</button>
<Child showText={this.state.showText} />
</div>
)
}
});
var Child = React.createClass({
render: function(){
if(this.props.showText){
return (
<div>
Pressed
</div>
)
}
return (
<div>
Default text
</div>
)
}
});
React.render(<Main/>, document.getElementById('container'));
当我改变我的showText
属性为真,并把它传递给我的子组件,我怎么能立即切换我的showText
为假?
我想要的是类似这样的东西,除了回调不应该被发送给child。
handleClick: function(){
this.setState({
showText: true
}, function(){
showText: false
})
}
我的Main
组件应该只发送true的子按钮时,按下。否则我希望它的状态一直为假
在父组件上调用setState
将导致render
函数触发,这反过来也将重新呈现Child
组件。你应该只需要在你的父节点上设置setState
,其余的层次结构应该根据父节点的状态重新呈现。
var updating = false;
var Main = React.createClass({
getInitialState: function(){
return {
showText: false
}
},
handleClick: function(){
updating = !updating;
alert('is updating: ' + updating);
if(updating) {
this.setState({
showText: true
});
}
},
render: function() {
return (
<div>
<button onClick={this.handleClick}>Press me</button>
<Child showText={this.state.showText} />
</div>
)
}
});
或另一种方式:
var Child = React.createClass({
shouldComponentUpdate: function(nextProps, nextState) {
return nextProps.showText;
},
render: function(){
if(this.props.showText){
return (
<div>
Pressed
</div>
)
}
return (
<div>
Default text
</div>
)
}
});
https://jsfiddle.net/69z2wepo/14670/从你的描述中我可以收集到,那么这可能是你想要的:https://jsfiddle.net/4vL3mubf/2/
子组件在第一次点击后永远不会改变,但我认为这是你想要的。
Main组件基本上可以通过以下函数来切换状态:
componentDidUpdate: function(prevProps, prevState) {
if (this.state.showText === true) {
this.setState({showText: false});
}
},
更新了Jim对shouldComponentUpdate
的使用。https://jsfiddle.net/4vL3mubf/3/
相关文章:
- 如何更改reactjs中外部/独立组件的状态或属性
- 从组件状态的数组中删除元素
- React js更改状态不会更新组件
- 如何在渲染函数中检查 react 中子组件的状态
- 复选框保持React JS中各组件的状态
- 设置两个反应组件之间状态的正确方式
- 如何在react中设置视频端组件的状态
- reactjs-redux,是否可以有一个由2个组件使用的状态
- 如何处理 React / Flux 组件中的状态转换
- 如何从一个组件访问另一个组件的状态
- 如果我不应该在组件WillUpdate中调用setState,如何更新状态(使用ReactJS)
- React ES6 导入无状态组件
- React Js 组件在状态更改后只渲染一次
- Reactjs:在修改对象之前,是否需要复制处于组件状态的对象
- 在 React/Redux 中管理同级组件之间的滚动状态
- 超时后在无状态组件中执行函数
- React无状态组件-如何组织内部函数
- 使用无状态组件创建注册表单
- React无状态组件中的Ajax调用
- React无状态组件不工作