を持つ親のコールバックを呼び出すときにレンダリングするために失敗した反応します正しく表示されます。どうして?それは、イベントオブジェクトまたは親イベントハンドラが子イベントハンドラから呼び出されたという事実と関係がありますか?は、子コンポーネントは、私が親/子コンポーネントを持ってSETSTATE
答えて
使用この(?
前後にスペースを追加):
style={{backgroundColor: this.state.modified ? "red" : "blue"}}
これに代えて:この後
style={{backgroundColor: this.state.modified?"red":"blue"}}
正常に動作しますあなたの例を変更します。
class Input extends React.Component {
constructor(props) {
super(props);
this.state = {value: this.props.value};
this.handleChange = this.handleChange.bind(this);
}
handleChange(e) {
// event is persisted, used to update local state
// and then call parent onChange callback after local state update
e.persist();
this.setState(
{value: e.target.value},
() => this.props.onChange(e)
);
}
render() {
return (<input style={this.props.style} onChange={this.handleChange} />);
}
}
class Page extends React.Component {
constructor(props) {
super(props);
this.state = {modified: false};
this.handleChange = this.handleChange.bind(this);
}
handleChange(e) {
const {name, value} = e.target;
console.log(`${name}: ${value}`);
// the two line execute fine, and everything works ok
// but as soon as I add the bottom on, Input no longer updates!
this.setState({modified: true});
}
render() {
return (
<Input onChange={this.handleChange}
style={{backgroundColor: this.state.modified ? "red":"blue"}}
/>
);
}
}
ReactDOM.render(
<Page />,
document.getElementById('container')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>
残念ながら、それは動作しません。実際のコードでは、実際にはスタイルプロパティを完全に削除しました。this.props.onChange({modified:this.state.modified})のようなカスタムパラメータでthis.props.onChange(e)を置き換えてみました。 int onChange function適切な変更を加えましたが、問題は解決しません。親OnChangeでsetStateを呼び出すと、子オブジェクトのレンダリングができなくなります。そして、これは私が例えばテキストを入力すると、変更が反映されないということです。 –
私の答えからコードスニペットを実行しましたか?それは正しく動作するようです。 –
あなたが提供したサンプルは機能しますが、実際のコードとは99%同一であるため、外部の理由が必要ですが、1%(親の追加の状態パラメータ)には何もありませんこの動作を説明してください。非常に奇妙な。 –
- 1. 出力イベント・エミッターは、子供から、私は親と子コンポーネントを持ってngOnInit
- 2. Angular2 - 私はこの子を持つコンポーネントを持っている子コンポーネント
- 3. は、私は次のコンポーネントを持っている子コンポーネント
- 4. 私は親コンポーネント持っ
- 5. Vueの子コンポーネントは、私は2つのコンポーネント持っ
- 6. は私が親コンポーネント、PlanListを持っている子コンポーネントの状態は未定義である
- 7. 子コンポーネントの更新親コンポーネント
- 8. ReactJS setStateが親コンポーネントから子コンポーネントに伝播しない変更
- 9. 私のコンポーネントに私は、私が店を作成し、その子コンポーネントに渡しトップレベルのコンポーネントを持って
- 10. は、私は、子コンポーネントにダウン配列を渡し、このコードを持っている私の親コンポーネント(検索バー成分)で子コンポーネント
- 11. Vueのは、私はこのコードを持っている子コンポーネント
- 12. Reactjの親コンポーネントは子コンポーネントの子と通信します
- 13. ngrxの親子コンポーネント
- 14. reactjs親トリガー子コンポーネント
- 15. ネイティブリアクト:表示する親コンポーネントを子コンポーネント
- 16. 角2親コンポーネントをチェックする子コンポーネント
- 17. 親コンポーネント上に子コンポーネントをレンダリングする
- 18. 子孫コンポーネントを親から親に変更して子コンポーネントを更新する
- 19. ReactJs:子コンポーネントから親コンポーネントへのデータ
- 20. reactjsの親コンポーネントの子コンポーネントへのアクセス
- 21. 子コンポーネントが親コンポーネントの状態を変更しています
- 22. は、私は子コンポーネントのリストをホストする親コンポーネントをした角度
- 23. は、子コンポーネントがデータベース
- 24. 親の動的な子コンポーネント
- 25. 子供のアクセスの親コンポーネント
- 26. AnagularJSコンポーネント - UI-roter - 親子コミニケーション
- 27. vue.js子 - 親コンポーネント通信
- 28. Angular2の親子コンポーネント通信
- 29. reactjsの親コンポーネントから子コンポーネントにデータを渡すには?
- 30. React - 親コンポーネントは子コンポーネントを別の要素/ノードにレンダリングする
「レンダリングが正しく行われない」とはどういう意味ですか?それはレンダリングされるかどうか?何か変わるでしょうか?もしそうなら、何? – squgeim
これは何ですか?this.setState( {値:e.target.value}、 ()=> this.props.onChange(e) ) '? – wesley6j
@ wesley6jこれは、コンポーネントの状態を設定し、状態が実際に更新されたときに、親コンポーネントからpropとして渡された 'onChange'関数が呼び出されます。 'setState'は非同期で、2番目の引数は状態変更が適用されたときに呼び出されるコールバック関数です。 –