В моем приложении пользователь должен иметь возможность редактировать свое имя. Я думал о том, чтобы его начальное имя было значением по умолчанию useState()
. Это работает отлично - имя также обновляется.
function EditName(props) {
const { navigation, dispatch, initFirstName } = props;
const [text, setText] = useState(initFirstName);
return (
<>
<Button title="Save" onPress={() => dispatch(updateFirstName(text))} />
<TextInput
style={{ height: 40, borderColor: 'gray', borderWidth: 1 }}
onChangeText={(inp) => setText(inp)}
value={text}
/>
</>
)
}
function mapStateToProps(state) {
return (
{
initFirstName: state.user.data.firstName,
}
);
}
export default connect(mapStateToProps)(EditName);
Но теперь я столкнулся с проблемой, если пользователь нажимает кнопку сохранения и обрабатывается dispatch(updateFirstName(text))
. text
снова перезаписывается initFirstName
.
Мой магазин Redux (toolkit) устроен следующим образом:
{
data: {
firstName: "Test"
},
updateFirstName: {
pending: null,
error: null,
},
}
Метод updateFirstName(text)
отправляет действие, которое устанавливает state.updateFirstName.pending = true;
. Если я это оставлю - все работает.
Итак, я предполагаю, что создается новая ссылка на хранилище (состояние), и React думает: О, я получил новое имя initFirstName (кроме того, оно все еще то же самое, потому что обновление еще не произошло).
Что было бы лучшим способом сделать это? Какое решение этой проблемы?
EditName
Компонент? - person Taghi Khavari   schedule 24.01.2021EditName
компоненты получаютrerenders
, и вам нужно избегать этого. - person Taghi Khavari   schedule 24.01.2021EditName
неправильным образом, я не могу ответить, если не увижу воспроизводимый пример ваших кодов. - person Taghi Khavari   schedule 24.01.2021