【发布时间】:2020-12-01 03:35:47
【问题描述】:
我的应用中有许多 useStates。我正在使用useEffect 向我的减速器发送一个动作。我不想对useState 的每次更改使用单个useEffect,而是为了提高效率和可读性,将所有状态更改放在单个useEffect 中。它似乎不像我想象的那样工作。使它起作用的正确语法是什么
const [nameFirst, setNameFirst] = useState('');
const [nameLast, setNameLast] = useState('');
const [nameEmail, setNameEmail] = useState('');
const [namePhone, setNamePhone] = useState('');
useEffect(() => {
if (nameFirst) {
dispatch({ type: "NAME_FIRST", nameFirst: nameFirst });
} else if (nameLast) {
dispatch({ type: "NAME_LAST", nameLast: nameLast });
} else if (nameEmail) {
dispatch({type: "NAME_EMAIL", nameEmail: nameEmail});
} else if (namePhone) {
dispatch({type: "NAME_PHONE", namePhone: namePhone});
}
}, [nameFirst, nameLast, nameEmail, namePhone]);
我想避免的是......
useEffect(() => {
dispatch({ type: "NAME_FIRST", nameFirst: nameFirst });
}, [nameFirst]);
useEffect(() => {
dispatch({ type: "NAME_LAST", nameLast: nameLast });
}, [nameLast]);
useEffect(() => {
dispatch({type: "NAME_EMAIL", nameEmail: nameEmail});
}, [nameEmail]);
useEffect(() => {
dispatch({type: "NAME_PHONE", namePhone: namePhone});
}, [namePhone]);
因为它看起来不是很干燥
【问题讨论】:
-
我其实更喜欢第二种方法;更容易阅读每个
useEffect应该做什么 -
你是否考虑过使用 redux hook
useSelector而不是 useState? -
@LuisFilipe 我没有考虑 useSelector 钩子。我使用的是 contextAPI,而不是 redux,如果这会改变你的评论
-
那么,
dispatch来自哪里?它是 contextApi 而不是 redux? -
@LuisFilipe 正确,来自上下文 api
const dispatch = useContext(DispatchContext);
标签: reactjs use-effect use-state react-functional-component