即使在上下文文件中将状态设置为null时,也不能清除上下文。有人能告诉我我的密码出了什么问题吗?这是我的密码:
import React, { createContext, useState } from 'react';
export const MembersContext = createContext([{}, () => {}]);
export const MembersProvider = ({ children }) => {
const [members, setMembers] = useState(null);
const refreshMembers = async () => {
try {
const data = await request('api/members');
setMembers(data);
} catch (error) {
console.log('ERROR: ', error);
}
};
const clearMembers = () => {
setMembers(null);
console.log('CLEARED MEMBERS IN CONTEXT FILE', members); // not cleared
};
return (
<MembersContext.Provider
value={{
members,
clearMembers,
}}
>
{children}
</MembersContext.Provider>
);
};
然后,在我的注销页面中,我有一个按钮来使用清晰的上下文函数:
import React, { useContext } from 'react';
import {
Button,
} from 'react-native';
import { MembersContext } from '../MembersContext';
const Settings = () => {
const { clearMembers, members } = useContext(MembersContext);
const clearContext = () => {
clearMembers();
console.log('CLEARED MEMBERS?: ', members); // not cleared
//logout()
};
return (
<Button onPress={()=> clearContext()}>Log Out</Button>
);
};
export default Settings;
我的控制台日志和屏幕仍然显示上一次会话的数据。
发布于 2021-03-24 19:31:29
让我们看看这两种情况:-
console.log('CLEARED MEMBERS?: ', members); // not cleared
-在这里,您不是记录将被更新的members
值,而是记录clearContext()
关闭的members
值,即当前状态值(在update).console.log('CLEARED MEMBERS IN CONTEXT FILE', members); // not cleared
之前),这不是查看members
是否发生变化的正确方法。状态更新是async
。在更新console.log(...)
之后执行members
将无法工作。我认为原因和上面一样。它不能工作,因为members
.的当前值关闭了clearMembers()
函数
每次对members
的更新都会产生一个新的clearMembers()
/clearContext()
(由于重新呈现),至少在本例中是这样的。这就是为什么这些函数总是可以访问最新的状态。
要检查members
是否实际更新,可以在函数体 of Settings
中记录值,或者在members
的依赖数组中记录members
中的值。
https://stackoverflow.com/questions/66786246
复制相似问题