我正在改变减速机的状态。在调试时,我检查了状态是否真的改变了。但是组件没有更新。
零件:
function Cliente(props) {
const dispatch = useDispatch()
const cliente = useSelector(({ erpCliente }) => erpCliente.cliente)
const { form, handleChange, setForm } = useForm(null)
...
function searchCepChangeFields() {
//This call the action and change the store on reducer
dispatch(Actions.searchCep(form.Cep))
.then(() => {
// This function is only taking values from the old state.
// The useSelector hook is not updating with store
setForm(form => _.setIn({...form}, 'Endereco', cliente.data.Endereco))
setForm(form => _.setIn({...form}, 'Uf', cliente.data.Uf))
setForm(form => _.setIn({...form}, 'Cidade', cliente.data.Cidade))
setForm(form => _.setIn({...form}, 'Bairro', cliente.data.Bairro))
})
}
减速器:
case Actions.SEARCH_CEP:
{
return {
...state,
data: {
...state.data,
Endereco: action.payload.logradouro,
Bairro: action.payload.bairro,
UF: action.payload.uf,
Cidade: action.payload.cidade
}
};
}
原文由 Danilo Cunha 发布,翻译遵循 CC BY-SA 4.0 许可协议
在处理对象时,您面临的问题非常普遍,道具不会改变,因为您正在更改对象属性,但对象本身不会从反应端改变。
即使你给它一个全新的对象,React 也看不到属性对象的变化,因为引用保持不变。
您需要像这样创建一个新参考: