[英]Can I use multiples useState and set data when api's got success using axios in react js?
Can I use multiples useState
like this?我可以像这样使用倍数
useState
吗? Actually this code is working but I want to clean it.实际上这段代码是有效的,但我想清理它。
const [shareCode, setShareCode] = useState();
const [createdBy, setCreatedBy] = useState();
const [className, setClassName] = useState();
const [subjectName, setSubjectName] = useState();
const [avatar, setAvatar] = useState();
const [startDate, setStartDate] = useState();
const [endDate, setEndDate] = useState();
const [quizStatus, setQuizStatus] = useState();
useEffect(() => {
commonApiCall(`url${var}`, {}, 'get').then((response) => {
if (response.status_code == 200) {
setShareCode(response.response.quiz.share_code)
setCreatedBy(response.response.quiz.created_by)
setClassName(response.response.quiz.class_id)
setSubjectName(response.response.quiz.subject_meta.subject_name)
setAvatar(response.response.quiz.image_avatar.image_path)
setStartDate(response.response.quiz.start_date)
setEndDate(response.response.quiz.end_date)
setQuizStatus(response.response.quiz.status)
}
}).catch((error) => {
console.log(error)
})
}, [])
function commonApiCall(url, data, method) {
const token = localStorage.getItem("token")
return axios({
method: method,
url: url,
data: data,
headers: {
"Authorization": token
}
})
}
export default function QuizDetails() {
return (
<div>
<div>{shareCode}</div>
<div>{createdBy}</div>
<div>{className}</div>
<div>{subjectName}</div>
<div>{avatar}</div>
<div>{startDate}</div>
<div>{endDate}</div>
<div>{quizStatus}</div>
</div>
)
}
You can use as much useState hooks as you would like.您可以根据需要使用尽可能多的 useState 挂钩。
May I just suggest to use a useReducer hook for these kinda scenarios.我可以建议在这些场景中使用 useReducer 钩子。 That way you can set multiply states at once.
这样你就可以一次设置多个状态。
I can share a great article by ROBIN WIERUCH.我可以分享 ROBIN WIERUCH的一篇很棒的文章。
Because the code is to long for a post I will just share the reducer function to prove a point.因为代码太长了,我只分享reducer function来证明一点。
switch (action.type) {
case 'FETCH_INIT':
return {
...state,
isLoading: true,
isError: false
};
case 'FETCH_SUCCESS':
return {
...state,
isLoading: false,
isError: false,
data: action.payload,
};
case 'FETCH_FAILURE':
return {
...state,
isLoading: false,
isError: true,
};
default:
throw new Error();
}
};
As you can see multiple properties in a state are set by just dispatching one action.正如您所见,state 中的多个属性只需调度一个操作即可设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.