Parece que componentWillReceiveProps
será completamente eliminado nas próximas versões, em favor de um novo método de ciclo de vida getDerivedStateFromProps
: static getDerivedStateFromProps () .
Após a inspeção, parece que agora você não consegue fazer uma comparação direta entre this.props
e nextProps
, como pode componentWillReceiveProps
. Existe alguma maneira de contornar isso?
Além disso, agora ele retorna um objeto. Estou correto ao assumir que o valor de retorno é essencialmente this.setState
?
Abaixo está um exemplo que encontrei on-line: Estado derivado de adereços / estado .
Antes
class ExampleComponent extends React.Component {
state = {
derivedData: computeDerivedState(this.props)
};
componentWillReceiveProps(nextProps) {
if (this.props.someValue !== nextProps.someValue) {
this.setState({
derivedData: computeDerivedState(nextProps)
});
}
}
}
Depois de
class ExampleComponent extends React.Component {
// Initialize state in constructor,
// Or with a property initializer.
state = {};
static getDerivedStateFromProps(nextProps, prevState) {
if (prevState.someMirroredValue !== nextProps.someValue) {
return {
derivedData: computeDerivedState(nextProps),
someMirroredValue: nextProps.someValue
};
}
// Return null to indicate no change to state.
return null;
}
}
fonte
componentWillReceiveProps
getDerivedStateFromProps
nunca foi realmente planejado para memorização . Por favor, veja minha resposta abaixo, onde descrevi a abordagem recomendada ....
? Ou seja, devemos retornar o objeto de estado inteiro ou apenas a parte com a qual nos preocupamos.À medida que recentemente postou no blog Reagir , na grande maioria dos casos você não precisa
getDerivedStateFromProps
de todo .Se você deseja calcular apenas alguns dados derivados, faça o seguinte:
render
memoize-one
.Aqui está o exemplo "depois" mais simples:
Confira esta seção da postagem do blog para saber mais.
fonte
componentWillReceiveProps
era simples e funcionou. Por que removê-lo para este lixo estática ...Como mencionado por Dan Abramov
Na verdade, usamos essa abordagem com o memoise one para qualquer tipo de suporte de proxy para cálculos de estados.
Nosso código fica assim
Os benefícios são que você não precisa codificar toneladas de clichês de comparação dentro
getDerivedStateFromProps
oucomponentWillReceiveProps
pode pular a inicialização de copiar e colar dentro de um construtor.NOTA:
Essa abordagem é usada apenas para fazer o proxy dos props para indicar, caso você tenha alguma lógica de estado interno, ela ainda precisará ser manipulada nos ciclos de vida dos componentes.
fonte