私は1つの子を持つ親コンポーネントを持っています。私は小道具を通してデータを渡すことで子供を更新しています。最初は正常に動作しますが、ボタンをクリックしてsetStateを使用して状態を更新すると、子はsetStateが終了するまでに古い値でレンダリングされます。子でcomponentWillReceivePropsを使って解決しましたが、これは正しい方法ですか?react.jsでparentからchildへデータを渡す方法
以下のコードでは、filterResults関数でsetStateを実行すると、Emplistコンポーネントは更新されません。
import React, { Component } from 'react';
import {Search} from './search-bar'
import Emplist from './emplist'
class App extends Component {
constructor(props){
super(props);
this.emp=[{
name:'pawan',
age:12
},
{
name:'manish',
age : 11
}]
this.state={emp:this.emp};
this.filterResults=this.filterResults.bind(this);
}
filterResults(val)
{
if(this.state)
{
let filt=[];
filt.push(
this.emp.find(e=>{
return e.age==val
})
);
this.setState({emp:filt});
}
}
render() {
return (
<div className="App">
<Search filterResults={this.filterResults}/>
<Emplist emp={this.state.emp}/>
</div>
);
}
}
export default App;
EmpList Componet
import React,{Component} from 'react'
export default class Emp extends Component
{
constructor(props){
super(props);
this.emplist=this.props.emp.map(e=>{return <li>{e.name}</li>});
this.next=this.emplist;
}
componentWillReceiveProps(nextProps,nextState,prevProps,prevState,nextContext,prevContext){
// this.props.updated(this.props.empo);
this.next=nextProps.emp[0];
if(this.next)
this.emplist= nextProps.emp.map(e=>{return <li>{e.name}</li>});
}
render(){
if(!this.next)
return <div>name not found</div>
else
return (
<div>
<br/>
<p>The list is here</p>
<ul>
{this.emplist}
</ul>
</div>
)
}
}
はい、正しい方法です。複雑なものや子供の何かのためにそれらの値を使う必要がないなら、 'this.props.someValue'がそれらと同じように動作するように直接使うことができます。子供の場合は –
、私はnextPropsを使用しました。子供がレンダーするときに私は更新された小道具を手に入れることができなかったからです。 this.props.someValueはどのように子供で動作するのですか? – pKay
あなたの子供のコンポーネントの完全なコードを与えることができますか?それはずっと簡単です。あなたの質問をコードで更新してください。 –