[英]React causing: Can't perform a React state update on an unmounted component
My situation: After login I try to get username and save it to redux store after this redirect from login to home page(in this page I display list of tasks) and I'm getting: Can't perform a React state update on an unmounted component.我的情况:登录后,我尝试获取用户名并将其保存到 redux 商店,此后从登录重定向到主页(在此页面中,我显示任务列表)并且我得到:无法执行 React state 更新未安装的组件。 This is a no-op, but it indicates a memory leak in your application.
这是一个空操作,但它表明您的应用程序中存在 memory 泄漏。
I try ususal isMounted trick but its not help.我尝试使用常用的 isMounted 技巧,但没有帮助。
Login.js登录.js
function getUsername(){
let username = ""
const headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
};
try {
axios.get(`${process.env.REACT_APP_API_URL}/api/get_username/`,{
headers: headers,
})
.then(response => username = response.data["username"])
.catch(error => setResponse(error.response))
} catch (err) {
console.log(err)
}
return username
}
const loginSubmit = e => {
e.preventDefault()
const headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-CSRFToken': csrftoken,
};
const body = {username: username, password: password}
try {
axios.post(`${process.env.REACT_APP_API_URL}/api/login/`, body,{
headers: headers,
})
.then(response => setResponse(response))
.catch(error => setResponse(error.response))
} catch (err) {
console.log(err)
}
dispatch({type: "SET_NAME", name:getUsername()})
Cookies.set("logged_in", "yes")
navigate("/", {replace:true})
};
Home.js首页.js
function getTasks(isMounted){
const headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
};
try {
axios.get(`${process.env.REACT_APP_API_URL}/api/tasks/`, {
headers: headers,})
.then(response => {if(isMounted ){setTasks(response.data)}})
.catch(error => setTasks(error.response))
} catch (err) {
console.log(err)
}
}
useEffect(() => {
let isMounted = true;
getTasks(isMounted);
return () => {
isMounted = false;
};
}, []);
You can use local storage.您可以使用本地存储。
Set item:设置项目:
localStorage.setItem("name", JSON.stringify(name))
Get Item:获取物品:
localStorage.getItem("name")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.