Когда actionFromParent
создает ссылку на это:
const UpdateFromParentAction = data => {
setState({
...state,
data
});
};
Оператор распространения ...state
обращается к значениям объекта точно, когда эта ссылка создается, не , когда в конечном итоге он исполняется. Если вы хотите, чтобы установщик использовал текущие значения при выполнении, вы можете изменить его на это:
setState(s => {return {...s, data}});
В более общем плане, однако, вы не должны использовать этот метод, чтобы обойти тот факт, что вы передают устаревшие значения вашим функциям. Любые logi c, которые вы хотите синхронизировать с текущим состоянием компонента, должны быть заключены в useEffect
, useCallback
, useReducer
hooks et c. везде, где возможно.
Сохранение собственных функций компонента или обработчика в его собственном состоянии также является классическим c анти-шаблоном, и его следует избегать именно по этой причине. Вы должны вернуть все нужные вам функции из хука в родительский компонент и получить к ним доступ - передача их обратно - это получатель ie в случае катастрофы.