2016-10-04 11 views
0

私は2つのコンポーネントを持っていますが、どのようにしてonChangeを通じてユーザー入力値を親コンポーネントに渡すのですか?私はonChangeに 'トリガー'を渡すことができますが、値を渡す方法は?react.jsの小道具を通してユーザー入力値を渡します

https://jsfiddle.net/gboaxm30

var InputComp = React.createClass({ 
    render: function() { 
    return (
    <div> 
    <input type="text" onChange={this.props.newVal} /> 
    </div> 
    ); 
    } 
}); 

var App = React.createClass({ 
    getInitialState(){ 
    return { 
    inputVal: 0 
    } 
    }, 
    inputChangedHandler(props) { 
    //set user changed value to inputVal 
    console.log(props) 
    }, 
    render() { 
    return(
    <div> 
     <InputComp newVal={this.inputChangedHandler}/> 
     <h4>{this.state.inputVal}</h4> 
     </div> 
    ) 
    } 
}) 

ReactDOM.render(
    <App />, 
    document.getElementById('container') 
); 

答えて

0

あなたは

inputChangedHandler(e) { 
     //set user changed value to inputVal 
     console.log(e.target.value) 
    }, 
+0

それは簡単ですか?この部分を変更するだけですか?私はonChangeイベントから値を渡す必要はありませんが、ハンドラ全体に付属していますか? –

+0

「選択」の場合はどうなりますか? –

+0

値はすでにイベントと共に渡されています。そうであれば、e.target.valueから値を取得できます。選択と同じです - あなたがバニラのjsの場合と同じです。 – naortor

0

は、子コンポーネントのonChangeイベントに関数を呼び出した後、e.target.valueのように入力の値にアクセスしてから渡すイベントから値を取る必要がありますそれは親コンポーネントにthis.props.newVal(e.target.value);

var InputComp = React.createClass({ 
    handleChange(e) { 
    this.props.newVal(e.target.value); 
    }, 
    render: function() { 
    return (
    <div> 
    <input type="text" onChange={this.handleChange} /> 
    </div> 
    ); 
    } 
}); 

var App = React.createClass({ 
    getInitialState(){ 
    return { 
    inputVal: 0 
    } 
    }, 
    inputChangedHandler(val) { 
    console.log(val); 
    this.setState({inputVal: val}); 
    }, 
    render() { 
    return(
    <div> 
     <InputComp newVal={this.inputChangedHandler}/> 
     <h4>{this.state.inputVal}</h4> 
     </div> 
    ) 
    } 
}) 

ReactDOM.render(
    <App />, 
    document.getElementById('container') 
); 

JSFIDDLE

+0

ああ、私はそれが通過する前にそれを得ることができます、どちらが良いですか?最初のオプションか2番目のオプション? 2番目のオプションは、e.target.valを使って 'inputChangedHandler'でも取得できます。 –

+0

refsはdocument.getElementByIdと同様にオブジェクトにアクセスするためのもので、同様にref.nameとしてアクセスできますthis.refs.name –

+0

どちらも同じように良好です。上記の方法を使用しているのは、複数の入力と選択がある場合、親から呼び出す関数から内部で扱うことができるということです。 –

1

私はここにあなたのためのデモを行った。http://codepen.io/PiotrBerebecki/pen/pEAQzV

アイデアが反応ドキュメントで定義されている、いわゆる制御された入力を使用することです:https://facebook.github.io/react/docs/forms.html#controlled-components

var InputComp = React.createClass({ 
    getInitialState() { 
    return { 
     userInput: '' 
    }; 
    }, 

    onChange(event) { 
    this.setState({ 
     userInput: event.target.value 
    }); 
    this.props.newVal(event.target.value); 
    }, 

    render() { 
    return (
     <div> 
     InputComp 
     <input type="text" 
       value={this.state.userInput} 
       onChange={this.onChange} /> 
     </div> 
    ); 
    } 
}); 




var App = React.createClass({ 
    getInitialState() { 
    return { 
    inputVal: '' 
    }; 
    }, 

    inputChangedHandler(valueFromChild) { 
    console.log('valuefromChild:', valueFromChild); 
    this.setState({ 
     inputVal: valueFromChild 
    }); 
    }, 

    render() { 
    return (
     <div> 
     <InputComp newVal={this.inputChangedHandler}/> 
     <h4>{this.state.inputVal}</h4> 
     </div> 
    ); 
    } 
}) 

ReactDOM.render(
    <App />, 
    document.getElementById('container') 
); 
+0

私の回答に同じデモが設定されています。 –

+0

Nice :)それは非常に一般的なパターン。私は制御された入力を使用していますが。 –

関連する問題