На основании следующей формулировки в вашем вопросе:
Работает, когда размещается в одной части проекта, но не работает, когда в другой.
Я предположил, что эти два места были частью одной и той же сборки (то есть package.json
).Если это так, то кажется маловероятным, что это проблема несовместимости.Но следующий недавний комментарий:
Код для этого компонента идентичен в обоих случаях, в основном это разные пакеты.
делает его похожим на два случаяявляются частью отдельных сборок.Если это так, то я думаю, что теория несовместимости крючков является разумной, хотя я не совсем убежден, потому что в этом случае я ожидаю сообщения в консоли (но я подозреваю, что есть несколько вариантов для нескольких реагирующих копий).проблема, которая не вызвала бы сообщение в консоли).
На следующей странице документации есть инструкции по устранению неисправностей:
https://reactjs.org/warnings/invalid-hook-call-warning.html#duplicate-react
На этой странице выНиже вы найдете инструкции по определению, есть ли у вас несколько версий реакции в игре.
Вы можете запустить npm ls react-dom
или npm ls react-native
в папке приложения, чтобы проверить, какую версию вы используете.Если вы найдете более одного из них, это также может создать проблемы (подробнее об этом ниже).
А затем еще ниже:
Если вы используете Node для пакетауправление, вы можете запустить эту проверку в папке вашего проекта:
npm ls react
Если это не показывает никаких сюрпризов (то есть просто показывает одну копию 16.8.1 для обоихреагировать и реагировать), тогда я бы предпочел предположить, что происходит нечто иное, чем несовместимость, и хотел бы увидеть код, который использует QuickViewCell
в проблемном случае.
На тангенциальной нотеЧто касается рекомендации Джаярджо использовать синтаксис «функционального обновления», я думаю, что более подходящий способ обновить это состояние hover
, чтобы легче было понять, что он правильный / надежный, состоит в явной передаче логического значения, а не в переключениинезависимо от текущего состояния.
Например:
export const QuickViewCell = props => {
const [hover, setHover] = useState(false)
return (
<Box onMouseEnter={()=>setHover(true)} onMouseLeave={()=>setHover(false)}>
<Text size="small">
{String(props.data.name)} this is my custom cell and it is amazing
</Text>
</Box>
);
}
Это позволяет быть уверенным, что вы случайно не попадете в состояние, когдавер застрял как противоположность того, что должно быть.