私は様々な子コンポーネントのデータを取り込むための素敵なApiWrapperコンポーネントを作ろうとしています。 https://jsfiddle.net/vinniejames/m1mesp6z/1/親子状態の変更後に子要素が反応しないようにします
class ApiWrapper extends React.Component {
constructor(props) {
super(props);
this.state = {
response: {
"title": 'nothing fetched yet'
}
};
}
componentDidMount() {
this._makeApiCall(this.props.endpoint);
}
_makeApiCall(endpoint) {
fetch(endpoint).then(function(response) {
this.setState({
response: response
});
}.bind(this))
}
render() {
return <Child data = {
this.state.response
}
/>;
}
}
class Child extends React.Component {
constructor(props) {
super(props);
this.state = {
data: props.data
};
}
render() {
console.log(this.state.data, 'new data');
return (<span> {
this.state.data.title
} < /span>);
};
}
var element = < ApiWrapper endpoint = "https://jsonplaceholder.typicode.com/posts/1"/> ;
ReactDOM.render(
element,
document.getElementById('container')
);
をしかし、何らかの理由で、子コンポーネントをするとき、親の状態の変更を更新していないようです。私が読んだすべてのものから、これは動作するはずです。
ここに何か不足していますか?
「知っているならば、[小道具に基づいて状態を初期化する](https://facebook.github.io/react/docs/react-component.html#constructor)は大丈夫ですあなたは何をしているのですか? 'nextProp'が' componentWillReceiveProps(nextProps) 'なしで再レンダリングを引き起こさないという事実に加えて、propを使って状態を設定することには、他の弱点がありますか? –
私が知る限り、他には欠点はありません。しかし、あなたのケースでは、子コンポーネントの内部に状態があることを明確に避けることができます。親はちょうど小道具としてデータを渡すことができ、親が新しい状態で再レンダリングするとき、子供はまた新しい小道具で再レンダリングするでしょう。実際には子供の中の状態を維持することはここでは不要です。純粋なコンポーネントFTW! –
私の問題が解決した理由を説明してくれてありがとう – OmarBizreh