В моем проекте используется Redux-Thunk.
Сегодня я обнаружил очень странную вещь.Позвольте мне показать вам некоторый код.
В одном компоненте я буду вызывать функции реквизита.
_onSelect = (selection) => {
const { onTextChange, onSelect } = this.props;
this.setState({
selections: [],
}, () => {
onTextChange(selection.Name);
onSelect(selection.UUID);
});
}
В другом компоненте эти две функции являются реквизитами из третьего компонента.
<AutoComplete
onTextChange={text => onValueChange('VesselName', text)}
onSelect={value => onValueChange('VesselID', value)}
/>
И в третьем компоненте изменение значения вызовет действия.
onValueChange = (field, value) => {
const {
setLaycanDetailsAction,
laycanDetails, // will be updated in store
} = this.props;
setLaycanDetailsAction({
...laycanDetails,
[field]: value,
});
}
Кроме того, это действие является синхронным.
export const setLaycanDetails = updatedLaycanDetails => ({
type: SET_LAYCAN_DETAILS,
payload: updatedLaycanDetails,
});
Теперь здесь идетстранная вещь: если _onSelect в 1-м компоненте вызывается, определенно, действие будет вызываться дважды из-за onTextChange
и onSelect
.
Но во втором вызове onValueChange (by onSelect), поскольку действие является синхронным, я предполагаю, что laycanDetails
обновляется из-за первого вызова onValueChange (посредством onTextChange).К сожалению, laycanDetails
во втором вызове не обновляется.
Я думаю, что это из-за закрытия.
Надеюсь, вы, ребята, можете дать мне урок!