أعد تصيير مكون التفاعل عندما تتغير دعائمه
تخيل أن لديك مشروع React و Redux يتكون من مكونين ، أحد الوالدين والطفل.
يقوم المكون الرئيسي بتمرير بعض الخاصيات إلى المكون الفرعي. عندما يتلقى المكوِّن الفرعي هذه الخاصيات ، يجب أن يستدعي بعض إجراء Redux الذي يغير بعض الخاصيات التي تم تمريرها من الأصل بشكل غير متزامن.
إليك المكونان:
المكون الرئيسي
class Parent extends React.Component { getChilds(){ let child = []; let i = 0; for (let keys in this.props.home.data) { child[i] = ( ); i++; if (i === 6) break; } return Rows; } render(){ return ( I am gonna call my child
{this.getChilds()} )
مكون الطفل
class Child extends React.Component { componentDidMount(){ if(this.props.data.items.length === 0){ // calling an action to fill this.props.data.items array with data this.props.getData(this.props.data.id); } } getGrandSon(){ let grandSons = []; if(this.props.data.items.length > 0){ grandSons = this.props.data.items.map( item => ); } return grandSons; } render(){ return ( I am the child component and I will call my own child
{this.getGrandSon()} ) } }
و redux-store
يتم تحديثها بشكل صحيح، ولكن عنصر الطفل لا إعادة تقديم.
ليس من مسؤولية Child
ملء البيانات عادةً . بدلاً من ذلك ، يجب أن يتلقى البيانات التي تم إعدادها بالفعل بواسطة Parent
. أيضًا ، يتم تحديث الدعائم تلقائيًا.
ومع ذلك ، قد يكون من المفيد تحديث البيانات من أحد Child
المكونات ومعالجتها ، خاصةً عند مشاركة Redux.
من المحتمل أن تقوم React بإجراء مقارنات ضحلة ، وقد لا تُعيد تصييرها على الرغم من أن الحالة تتغير بشكل واضح.
كحل بديل ، يمكنك القيام بذلك في mapStateToProps
:
const mapStateToProps = state => { return { id: state.data.id, items: state.data.items } }