будет возвращать уникальный ему индекс, при чем пока компонент не удалился должен быть один и тот же. Вот код:
let _index = 0;
const useIndex = () => {
const index = useMemo(() => _index++, []);
// const [index] = useState(_index++); - same problem
console.log("INDEX", index);
return index;
};
const useHook = () => {
const index = useIndex();
console.log("Now index is", index);
useEffect(() => {
return () => {
console.log(`Remove ${index}`);
};
}, []);
return { index };
};
export default function App() {
const [isIndex, setIsIndex] = useState(true);
return (
<div className="App">
{isIndex && <NonIndexComponent />}
{!isIndex && <IndexComponent />}
<button onClick={() => setIsIndex(!isIndex)}>
Toggle indexes components
</button>
</div>
);
}
const IndexComponent = () => {
const { index } = useHook();
return <h1>My index is {index}</h1>;
};
const NonIndexComponent = () => {
return <h1>I'm without index</h1>;
};
Вот вывод консоли:
INDEX 0
Now index is 0
INDEX 1
Now index is 1
// вывод ниже после удаления компонента
Remove 1
Почему один компонент получает разные индексы?
Codesandbox - https://codesandbox.io/s/gallant-hooks-1drpy?file=/src/App.js
родитель рендерится, по идее.
а почему он должен получать одинаковые индексы?
вообще очень хотелось бы узнать проблему, решающую этим хуком.
Обсуждают сегодня