无法修复“的setState(...):只能更新一安装或安装组件”
谁能告诉我有什么不对的:无法修复“的setState(...):只能更新一安装或安装组件”
import React, { Component, PropTypes } from 'react';
class ExampleModal extends Component {
static propTypes = {
is_shown: PropTypes.bool
}
show =() => {
console.log('The function gets called, but setState fails');
this.setState({ is_shown: true });
}
render() {
return (
<button onClick={this.show}>Press me</button>
);
}
}
export default ExampleModal;
试着用搜索引擎,要通过文件,并改变语法,但仍然没有解决方案。例如,可以通过导入上述组件并将其放入主要的<div>
中来复制this example app。
你错过了constructor
我相信。
constructor(props) {
super(props);
this.state = {
is_shown: false
};
}
show() {
console.log('The function gets called, but setState fails');
this.setState({ is_shown: true });
}
render() {
return (
<button onClick={this.show.bind(this)}>Press me</button>
);
}
要使类方法的格式一致,我在{this.show}
这使得this
指向这个类show()
方法添加.bind
。
这可以工作,但我的目标是让上述语法工作。就在现在,我发现了罪魁祸首 - 巴别塔配置中缺少的transform-class-properties插件。 – Kitanotori
事实证明,Babel需要transform-class-properties plugin才能正确处理语法。不幸的是,Webpack或Babel在任何时候都没有显示错误消息。看起来,插件排序也很关键:如果我在热插件插件之后插入转换插件,问题仍然存在。
万一别人是战斗同样的问题,这里要说的是固定的问题.babelrc:
{
"presets": ["stage-2", "react"],
"env": {
"development": {
"plugins": [
[
"transform-class-properties",
"react-hot-loader/babel"
]
]
}
}
}
当然,你还需要安装插件:
npm install --save-dev babel-plugin-transform-class-properties
编辑:尴尬,但实际上这个“固定”问题的原因是因为数组中的拼写错误,导致react-hot-loader未被加载。因此,反应热装载机是罪魁祸首,但我还没有找到原因......
谢谢,我有完全相同的问题,如果我评论 //“react-hot-loader/babel” 然后它工作,我想添加react-hot-loader回来,你管理了吗? – alfonsodev
你没有定义的状态。 'is_shown'是'prop' –
我认为这是无关的。我试着评论propTypes,在构造函数中设置状态,以及各种技巧,但没有任何帮助。我不知道这个问题是否由我的应用程序设置造成的。 – Kitanotori