Redux-Thunk Синхронные действия не являются синхронными - PullRequest
0 голосов
/ 22 мая 2019

В моем проекте используется 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 во втором вызове не обновляется.

Я думаю, что это из-за закрытия.

Надеюсь, вы, ребята, можете дать мне урок!

...