在ReactJS. TLDR中使用上下文时,我有一个非常具体的问题:我使用两个上下文,一个用于存储用户详细信息的用户,一个用于存储任务详细信息的任务。如果注册了新令牌(新登录),我的用户上下文将更新用户名
const [username, setUserName] = useState();
const [token, setToken] = useState();
useEffect(() => {
const user = Pool.getCurrentUser();
if (user) {
setUserName(user.username);
}
}, [token]);
然后我有一个任务上下文,它使用用户上下文中的用户名执行一个获取API调用。但是当我查看日志时,它会跟踪以前的用户名,并且只在刷新时更新它。
function TasksProvider({ children }) {
const { username } = useContext(AccountContext);
//console.log(username);
const [todos, setTodos] = useState([]);
const fetchTasks = async () => {
const result = await getAllTasks(username);
setTodos(result);
};
useEffect(() => {
fetchTasks();
}, []);
下面是我的上下文提供程序
function ContextProvider({ children }) {
return (
<AccountContext>
<CategoriesContext>
<PathContext>
<TasksContext>{children}</TasksContext>
</PathContext>
</CategoriesContext>
</AccountContext>
);
}
我基本上希望我的TaskContext在每次新用户登录时也有新的用户名。绝对不要跟踪以前的用户名。我已经尝试过状态,并试图在令牌发生变化时更新,但似乎无法理解它。
1条答案
按热度按时间kt06eoxx1#
在
useEffect
调用中缺少作为依赖项的username
如果添加了这个变量,那么每当用户名更改时都会调用
fetchTasks()
。您可以使用React文档中提到的eslint插件“eslint-plugin-react-hooks”来避免这些问题:https://reactjs.org/docs/hooks-rules.html#eslint-plugin