2016-11-25 86 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

相關問題