重置状态导致 React mixin 出现问题
Resetting state causing issues with React mixin
在我的React组件中,我正在使用MediaMixin来应用基于媒体查询的类。下面是一个简化的示例:
R.createClass({
mixins: [MediaMixin],
render: function () {
var mediaquery = this.state.media;
return (
<Component responsive={mediaquery.small}>
<input value={this.state.formInput1} >
<input value={this.state.formInput2} >
<input value={this.state.formInput3} >
</Compontent>
)
}
});
在上面,{mediaquery.small}
根据视口大小返回true
或false
。
组件还具有初始状态,用于为组件中的窗体设置一些值。
getInitialState: function () {
return {
formInput1: '',
formInput2: '',
formInput3: null
};
},
当表单被提交/保存,或表格被取消时,为了重置我们使用的表格:
_cancel: function () {
this.setState(this.getInitialState());
}
但是,这会导致mixin出现问题,因为它删除了包含mixin的mediaquery的state
属性。
我现在使用的解决方案涉及手动重置与表单相关的state
属性,例如:
_cancel: function () {
this.setState({
allowanceType: '',
allowanceAmount: '',
allowanceDocument: null
});
}
问题 - 如何重置state
并保持 mixin state
属性(无需手动重置每个表单state
属性)?
你可以
使用它。
_cancel: function () {
var newState = this.getInitialState();
newState.media = this.state.media;
this.setState(newState);
}
请记住,您应该将当前状态视为不可变(仅供参考)。
您可以将组件的初始状态存储在另一个函数中,该函数与mixin共享getInitialState。
喜欢:
getInitialState: function() {
return this.componentInitialState();
},
componentInitialState: function() {
return {
allowanceType: '',
allowanceAmount: '',
allowanceDocument: null
};
},
cancel: function() {
this.setState(this.componentInitialState());
}
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 如何解决Yii中的页面刷新问题
- Safari(Mac OS)上的jQuery平滑滚动问题
- jqGrid树网格问题
- 使用正则表达式评估电子邮件地址时出现性能问题
- 如何消除代码中的未定义和其他问题
- JavaScript代码问题:我正在将对象转换为数组
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题
- 由于iframe导致的问题
- 重置状态导致 React mixin 出现问题
- 只有当我使用Mixin时,Ember才会导致路由问题.我该如何解决此问题