Поскольку перехватчики React зависят от порядка выполнения, обычно не следует использовать перехватчики внутри циклов. Я столкнулся с парой ситуаций, когда у меня есть постоянный ввод в ловушку, и поэтому не должно быть никаких проблем. Единственное, что меня интересует, это как заставить входные данные быть постоянными.
Ниже приведен упрощенный пример:
const useHookWithConstantInput = (constantIdArray) => {
const initialState = buildInitialState(constantIdArray);
const [state, changeState] = useState(initialState);
const callbacks = constantIdArray.map((id) => useCallback(() => {
const newState = buildNewState(id, constantIdArray);
changeState(newState);
}));
return { state, callbacks };
}
const idArray = ['id-1', 'id-2', 'id-3'];
const SomeComponent = () => {
const { state, callbacks } = useHookWithConstantInput(idArray);
return (
<div>
<div onClick={callbacks[0]}>
{state[0]}
</div>
<div onClick={callbacks[1]}>
{state[1]}
</div>
<div onClick={callbacks[2]}>
{state[2]}
</div>
</div>
)
}
Существует ли шаблон, как заставить constantIdArray
не изменяться? Моя идея состоит в том, чтобы использовать функцию создателя для ловушки, как это:
const createUseHookWithConstantInput = (constantIdArray) => () => {
...
}
const idArray = ['id-1', 'id-2', 'id-3'];
const useHookWithConstantInput = createUseHookWithConstantInput(idArray)
const SomeComponent = () => {
const { state, callbacks } = useHookWithConstantInput();
return (
...
)
}
Как вы решаете подобные ситуации?