Renderizar novamente o componente React quando seu suporte mudar
Imagine que você tem um projeto React e Redux com dois componentes, um pai e um filho.
O componente pai passa alguns adereços para o componente filho. Quando o componente filho recebe esses props, ele deve chamar alguma ação Redux que altera alguns dos props que foram passados do pai de forma assíncrona.
Aqui estão os dois componentes:
Componente Pai
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()} )
Componente Criança
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()} ) } }
O redux-store
é atualizado corretamente, mas o componente filho não é renderizado novamente.
Normalmente não é responsabilidade do Child
preencher os dados. Em vez disso, ele deve receber dados que já foram preparados pelo Parent
. Além disso, os adereços são atualizados automaticamente.
Ainda assim, pode ser útil atualizar e manipular dados de um Child
componente, especialmente quando Redux está envolvido.
O React provavelmente realiza comparações superficiais e pode não ser renderizado novamente, embora o estado esteja claramente mudando.
Como alternativa, você pode fazer isso em mapStateToProps
:
const mapStateToProps = state => { return { id: state.data.id, items: state.data.items } }