Эй, я полностью согласен с объяснениями @ RVRJ. Итак, что произойдет, когда вы импортируете какие-либо хуки, это создаст новый объект этого хука. Давайте предположим, что если вы импортируете один и тот же хук в два разных файла, это означает, что вы создаете два разностных объекта этого хука.
Здесь я попытался решить вашу проблему, используя только хуки, но я импортирую хук только один раз и прошел его объект к дочернему компоненту <C1 /> and <C2 />
.
Вот пример того, как я создал отдельный объект useCounter hook
import React from "react";
import C1 from "./components/C1";
import C2 from "./components/C2";
import useCounter from "./hooks/useCounter";
function App() {
const [count, updateCount] = useCounter(); // <<-- created one object
return (
<div className="App">
<h1>App Component</h1>
<hr />
<C1 count={count} updateCount={updateCount} /> {/* passing values ad props */}
<hr />
<C2 count={count} updateCount={updateCount} /> {/* passing values ad props */}
</div>
);
}
export default App;
, и теперь вы можете получить доступ к count и updateCount как реквизиты у каждого ребенка.
Вот компонент C1 после изменения
// C1 component
import React from "react";
function C1({ count }) { {/* <-- access count as props */}
return (
<div>
Component 1 <br />
Count: {count}
</div>
);
}
export default C1;
А вот ваш компонент C2
// C2 component
import React from "react";
function C3({ count, updateCount }) { {/* <-- access count and as updateCount props */}
const handleIncr = () => {
updateCount(count + 1);
};
const handleDecr = () => {
updateCount(count - 1);
};
return (
<div>
Component 2 <br />
<button onClick={handleIncr}>Increment</button>
<button onClick={handleDecr}>Decrement</button>
<br />
<br />
<br />
Count: {count}
</div>
);
}
export default C3;
Вот обновленные и рабочие решения вашей проблемы https://codesandbox.io/s/romantic-fire-b3exw
Примечание: я не знаю, каков вариант использования хуков для тех же значений состояния, поэтому я все же рекомендую вам используйте redux для совместного использования состояний между компонентами.