2016-11-25 89 views
-1

谁能告诉我有什么不对的:无法修复“的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

+0

你没有定义的状态。 'is_shown'是'prop' –

+0

我认为这是无关的。我试着评论propTypes,在构造函数中设置状态,以及各种技巧,但没有任何帮助。我不知道这个问题是否由我的应用程序设置造成的。 – Kitanotori

回答

0

你错过了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

+0

这可以工作,但我的目标是让上述语法工作。就在现在,我发现了罪魁祸首 - 巴别塔配置中缺少的transform-class-properties插件。 – Kitanotori

2

事实证明,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未被加载。因此,反应热装载机是罪魁祸首,但我还没有找到原因......

+0

谢谢,我有完全相同的问题,如果我评论 //“react-hot-loader/babel” 然后它工作,我想添加react-hot-loader回来,你管理了吗? – alfonsodev

相关问题