我只是不明白为什么会发生这种情况,甚至不明白如何解释它,我有这个自定义挂钩:
const useFeatures = (existingFeatures: Ft[]) => {
console.log('fts provided to state:', existingFeatures)
const [features, setFeatures] = useState(existingFeatures)
console.log('fts given by state:', features)
...
并且输出是
LOG fts provided to state: [{"done": true, "ftName": "task", "name": "T"}]
LOG fts given by state: [{"ftName": "number", "label": "N", "name": "", "value": 22}]
这发生在使用useFeatures自定义挂钩并提供不同"features"(初始状态)的不同组件的渲染之间,就像useState一样,即使重新初始化,也会缓存先前的状态. 我还应该澄清一下,我正在开发一个React Native应用程序. 我知道没有太多信息可以发布问题,但我无法在我的项目之外重现该错误. 只是想知道是否有人经历过类似的事情.
Ivetry 在超时后运行第二个console.log,甚至在参数为[features]
的useEffect挂钩内运行第二个console.log
并且仍然得到相同的日志(log)
编辑
我有一些来自useQuery领域挂钩的"记录"
const records = useQuery(
RecordSchema,
recs => recs.filtered('date == $0', strDateFmt(dayOn)),
[dayOn],
).map(r => ({
...r,
features: r.features.map(f => JSON.parse(f)),
}))
useFeatures由EditableRecord使用
{records.map((record, i) => (
<EditableRecord key={i} existingRecordId={record._id} />
))}
EditableRecord.tsx
const existingRecord = useObject<RecordSchema>('Record', existingRecordId)
const { features, dispatchFeatures } = useFeatures(
existingRecord?.features.map(f => JSON.parse(f)) || [],
)
如果我多次更新dayOn(来自useState挂钩),则会使用生成此意外日志(log)的第一条记录的功能来呈现记录
LOG fts provided to state: [{"color": "#844", "ftName": "tag", "name": "Tg"}]
LOG fts given by state: [{"content": "Ssss", "ftName": "text", "name": "", "prompt": "P"}]
LOG fts provided to state: [{"ftName": "number", "label": "N", "name": "", "value": 22}]
LOG fts given by state: [{"content": "Ssss", "ftName": "text", "name": "", "prompt": "P"}]
LOG fts provided to state: [{"done": true, "ftName": "task", "name": "T"}]
LOG fts given by state: [{"content": "Ssss", "ftName": "text", "name": "", "prompt": "P"}]