2016-10-07 9 views
2

私は、Reactが自分の制御されたテキスト入力コンポーネントに自分の内部状態を与えると主張するのは混乱しています。私は、制御された入力を作成するための公式の文書に従いました。Reactはコンソールから私を驚かせています。なぜ制御されたテキストコンポーネントに状態を渡すことができませんか?

* warning.js:36警告:ClientInfoTextInputは制御されるタイプのテキストの制御されない入力を変更しています。入力要素は、制御されていない状態から制御された状態に切り替わるべきではありません(またはその逆)。コンポーネントの寿命の間、制御された入力要素または制御されていない入力要素を使用するかどうかを決めます。

render() { 
 
    return (
 
     <input type="text" 
 
     className={styles.ClientInfoTextInput} 
 
     value={this.props.propToPass} 
 
     onChange={this.props.propMethodToPass} 
 
     /> 
 
    )

、なぜ私は動揺なって反応することなく制御入力コンポーネントに小道具を経由して状態を下に渡すことはできませんか?

+0

コンポーネントコードが表示されます。コンポーネント名はClientInfoTextInputですか?もしそうなら、あなたの問題は、これが初期化されたときに "this.props.propToPass"が定義されていないことだと思います。定義されていないかどうかのチェックを行い、そうであればデフォルト値を渡すことができます。 –

+0

ファイル全体を表示すると、何が起こっているのかわかりやすくなります。もっと多くの可能性が@ERRGあなたの問題だが、私たちがもっと見るまでわからない – finalfreq

答えて

3

完全なコードを見ることなく、あなたのコンポーネントをデバッグするのは難しいですが、次のように制御入力コンポーネントに小道具を経由して状態を伝承する一つの方法は次のとおりです。完全ずに伝えるのは難しいですhttp://codepen.io/PiotrBerebecki/pen/bwLjaE

class App extends React.Component { 
    constructor() { 
    super(); 
    this.state = { 
     textInParent: '' 
    }; 
    this.handleTextFromChild = this.handleTextFromChild.bind(this); 
    } 

    handleTextFromChild(data) { 
    this.setState({ 
     textInParent: data 
    }); 
    } 

    render() { 
    return (
     <div> 
     <InputForm propMethodToPass={this.handleTextFromChild} 
        propToPass={this.state.textInParent} /> 
     </div> 
    ); 
    } 
} 


class InputForm extends React.Component { 
    render() { 
    return (
     <div> 
     <input type="text" 
       value={this.props.propToPass} 
       onChange={(event) => this.props.propMethodToPass(event.target.value)} /> 
     <p>Text received from Parent via props: {this.props.propToPass}</p> 
     </div> 
    ); 
    } 
} 


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

Sneetches、あなたは私に答えに何かをしたいですか、それはあなたに解決策を与えますか? –

+0

ええとPiotr Berebecki、これは問題ありません。しかし、一般的な質問と同様に、Reactテキスト入力要素が入力値に対して独自の内部状態を持たないようにする反パターンですか?私は "UI状態"について言及しているので、そうでなければ "プレゼンテーション"要素はユーザー入力の変更をすぐに示すために内部状態を持っている必要があるということを覚えています。一方、孤独な入力については、遠い祖先に関連する値だけが自分の内部状態を持つことは愚かなようです(私のコードの場合のように)。これは、ここで正しいパターン、UIの状態、または小道具を経由して下降していますか? – sneetches

+0

私はReact Docsからアドバイスを受け、UIの状態を維持する傾向があります。また、これはあなたの考慮に役立つかもしれません:https://facebook.github.io/react/tips/props-in-getInitialState-as-anti-pattern.htmlここで彼らは "それは反パターンではない小道具は内部的に管理された状態のシードデータだけであることが明らかになっています。こちらもご覧ください:http://spraso.com/managing-react-controlled-component-state/ –

関連する問題