React:从功能组件中设置容器中的状态
React: setting state in container from within functional component
所以我有一个容器组件,它呈现一个功能组件以及其他一些JSX。我试图改变状态,从一个按钮点击,从该功能组件内部发生的容器。然而,我还没有找到一篇关于解决这个问题的好文章,我遇到了this.setState() is not a function
的问题,或者我通过尝试trigger a setState call during a render
(或多或少)完全打破了当前选项卡。
下面是一些示例代码来说明我的意思:
class TestComponent extends Component {
render() {
<div>
<FunctionalComponent close={(type) => this.setState({ property: type })} />
</div>
}
};
功能组件:const FunctionalComponent = (props) => {
return (
<button onClick={props.close('stringvalue')}>Click to setState</button>
);
};
还尝试通过在容器内创建一个单独的函数并从那里调用this.setState()
,但问题仍然存在。这是上下文问题吗?
更习惯一点…
class TestComponent extends Component {
constructor(props) {
super(props);
this.onClose = this.onClose.bind(this);
}
onClose(property) {
this.setState({ property })
}
render() {
return (
<div>
<FunctionalComponent close={this.onClose} />
</div>
)
}
};
const FunctionalComponent = ({ close }) => {
return (
<button onClick={close.bind(null, 'stringvalue')}>Click to setState</button>
);
};
我认为问题是你的props.close
函数在每次渲染时被调用,因为你没有传递一个函数,而是调用它。
onClick需要一个函数
const FunctionalComponent = (props) => {
function onClick() {
props.close('stringvalue');
}
return (
<button onClick={onClick}>Click to setState</button>
);
};
或
const FunctionalComponent = (props) => {
return (
<button onClick={() => props.close('stringvalue')}>Click to setState</button>
);
};
相关文章:
- 在达到状态之前在Redux Reducer中设置日期格式
- 设置两个反应组件之间状态的正确方式
- 如何在react中设置视频端组件的状态
- 根据文件内容设置状态
- 如果设置了位置,如何在每个状态下检查路由器ui,如果没有,则转到登录页
- 如何将链接状态设置为在用户访问另一个页面之前保持
- 通过单选按钮状态设置HTML元素的可见性
- 将状态设置为“输入名称”字段的值时遇到问题
- AngularJS:使用路由记住复杂视图的状态/设置
- 如果未选中任何复选框,请将状态设置为 0
- 如何使用 ui-router 将子项或孙项状态设置为默认索引状态
- 当有人关闭浏览器或使用php和javascript离开我的网站时,将用户状态设置为脱机
- React:根据状态设置禁用属性
- 如何为每个Angular UI路由器状态设置不同的控制器
- jtree:如何将ajax加载的根节点的状态设置为待定状态
- 从状态设置工厂变量
- 使用不可变的js将reducer状态设置为返回的数组
- Angular&高图表.通过程序将状态设置为悬停
- 链接复选框's的选中状态设置为文本框的值
- 如何为多个 url 状态设置仅使用反应路由器激活一个链路