2016-10-05 11 views
0

編集をクリックすると入力バーが表示されます。保存ボタンをクリックするとユーザーの入力が得られますが、なぜ私は未定義ですか?コンソールにエラーはありません。this.refs.something.valueは反応で未定義を返します

http://jsfiddle.net/2onzybk6/2

var App = React.createClass({ 
    getInitialState() { 
    return { 
     items : [1, 2, 3], 
     isEdit: null 
    }; 
    }, 
    renderEditForm() { 
    return (
     <div> 
     <input type="text" ref="newItem" /> 
     <button onClick={ this.saveHandler }>Save</button> 
     </div> 
    ); 
    }, 

    ItemCtrl(index) { 
    if (index != this.state.isEdit) { 
     return (
     <div className="itemCtrlWrap"> 
      <button onClick={ this.editHandler.bind(this, index) }>Edit</button> 
     </div> 
     ); 
    } 
    }, 
    editHandler(i) { 
    this.setState({ isEdit: i }); 
    }, 
    saveHandler() { 

    console.log(this.refs.newItem.value); // why is this undefined? 
    this.setState({ isEdit: null }); 
    }, 

    renderItem() { 
    return (
    this.state.items.map((item, i) => 
     <li key={ i }> {this.state.isEdit == i ? this.renderEditForm() : item} {this.ItemCtrl(i)}</li>) 
    ); 
    }, 
    render() { 
    return (
     <ul> 
     {this.renderItem()} 
     </ul> 
    ); 
    } 
}); 

答えて

2

使用しているリアクトのバージョンでは、これを実行する必要があります:最近のバージョンで

this.refs.newItem.getDOMNode().value

あなたがthis.refs.newItemを行うときに、それが実際にDOMノードを返しますが、このフィドルで使用しているバージョンでは、Reactコンポーネントオブジェクトを返します。 getDOMNode()に電話すると、実際のDOM要素が取得され、通常のDOMプロパティを呼び出すことができます。

+0

nice catch buddyありがとうございます。 1つの質問、私は状態を変更すると入力フィールドの値が消えてしまうのはなぜですか?私はその部分を変更していない、私のために反応しますか? – Sandy

+0

編集に関する質問については、字下げの変更は歓迎しますが、コードを変更することは避けてください。 –

+0

それは事故だった@EmileBergeron私はテキストエディタにインデントを変更するためにペーストしたが、もともと誤ってインデントされていたときにスタックオーバーフロー内で行う良い方法が見つからなかった。 – finalfreq

関連する問題