【发布时间】:2021-08-19 22:01:33
【问题描述】:
我的这些组件没有任何反冲钩。
const C = () => {
console.log('---->C')
return <Text>C</Text>
}
const B = () => {
console.log('--->B')
return <>
<Text>B</Text>
<C/>
</>
}
const A = () => {
console.log('-->A')
return <>
<Text>A</Text>
<B/>
</>
}
const App = () => {
console.log('->App')
return (
<RecoilRoot>
<A />
</RecoilRoot>
);
};
当我在控制台中运行应用程序时,会显示指定的日志:
LOG ->App
LOG -->A
LOG --->B
LOG ---->C
现在我将使用反冲钩子来改变和访问原子状态
import { atom, useSetRecoilState, useRecoilState, useRecoilValue, RecoilRoot } from "recoil";
const atomTest = atom({
key: "abcatomTest",
default: "A"
})
const C = () => {
console.log('---->C')
const [value, set] = useRecoilState(atomTest)
return <>
<Text>C</Text>
</>
}
const B = () => {
console.log('--->B')
const set = useSetRecoilState(atomTest)
return <>
<Text>B</Text>
<C/>
</>
}
const A = () => {
console.log('-->A')
const value = useRecoilValue(atomTest)
return <>
<Text>A</Text>
<B/>
</>
}
const App = () => {
console.log('->App')
return (
<RecoilRoot>
<A />
</RecoilRoot>
);
};
我什至不使用从useRecoilValue、useSetRecoilState、useRecoilState 返回的值和函数,如果我使用它,它可以正常工作,但在第一次渲染时,日志是:
LOG ->App
LOG -->A
LOG -->A
LOG ->App
LOG --->B
LOG ---->C
LOG ---->C
LOG --->B
LOG -->A
LOG ->App
LOG -->A
LOG --->B
LOG ---->C
为什么recoil会强制重新渲染包括root在内的多个组件,我根本没有改变状态,并且在App组件中也不依赖于任何状态!
【问题讨论】:
标签: react-native state-management recoiljs