2017-05-27 9 views
0

新しいテキストを入力できないTextAreaオブジェクトがあります。最初はコンストラクタなしでこれを試しましたが、thisにバインドされていなかったので、私がonメソッドを呼び出そうとするときに領域を取得します。 onChangeメソッドをバインドするコンストラクタを追加すると、テキストを入力できなくなります。Reactjs TextAreaオブジェクトは可変ではなく読み込み専用です

 class TextAreaCounter extends React.Component{ 
      constructor(props) { 
       super(props); 
       this._textChange = this._textChange.bind(this); 
      } 
      getInitialState() { 
       return { 
        text: this.props.text, 
       }; 
      } 
      _textChange(ev) { 
       this.setState({ 
        text: ev.target.value, 
       }); 
      } 
      render() { 
       return React.DOM.div(null, 
        React.DOM.textarea({ 
         value: this.props.text, 
         onChange: this._textChange, 
        }), 
        React.DOM.h3(null, this.props.text.length) 
       ); 
      } 
     } 
     TextAreaCounter.PropTypes = { 
      text: React.PropTypes.string, 
     } 
     TextAreaCounter.defaultProps = { 
      text: '', 
     } 
     ReactDOM.render(
      React.createElement(TextAreaCounter, { 
       text: "billy", 
      }), 
      document.getElementById("app") 
     ); 

答えて

0

this.step.textをthis.props.textではなくtextareaに渡す必要があります。

+0

修正してください!コンストラクタに状態を設定する必要があります。 – eclipse

0

回答が見つかりました!

最初に、私はthis.stateの代わりにthis.propsをレンダリング方法で使用していました。したがって、私のonChangeメソッドは呼び出されましたが、実際には更新されませんでした。

次に、getIntialStateは廃止予定です。そのため、コンストラクタ内の状態オブジェクトに更新します。

 class TextAreaCounter extends React.Component{ 
      constructor(props) { 
       super(props); 
       this._textChange = this._textChange.bind(this); 
       this.state = { 
        text: this.props.text, 
       }; 
      } 
      _textChange(ev) { 
       this.setState({ 
        text: ev.target.value, 
       }); 
      } 
      render() { 
       return React.DOM.div(null, 
        React.DOM.textarea({ 
         value: this.state.text, 
         onChange: this._textChange, 
        }), 
        React.DOM.h3(null, this.state.text.length) 
       ); 
      } 
     } 
関連する問題