【发布时间】:2021-02-07 10:39:05
【问题描述】:
我写了以下代码:
function CreateModal({toggleCreatePorjectModal, fetchProjects}) {
const [formObj, setFormObj] = useState({name: "", link: "", error: ""})
function validateLinkAndCreateProject() {
if(formObj.link.trim() === "" || formObj.name.trim() === "") {
setFormObj(state => ({...state, error: "ALL fields are mandatory, please enter Project Name and Feed Link to create project."}))
return
}
rssFeedParser(formObj.link.trim())
.then((res) => {
axios.post(`${ServerPath}/projects/create`, {
name: formObj.name,
link: formObj.link
})
.then(response => {
if(response.data.error) {
setFormObj(state => ({...state, error: "Something went wrong. Please try again after some time."}))
} else {
fetchProjects()
toggleCreatePorjectModal(false)
}
})
.catch((err) => {
setFormObj(state => ({...state, error: err.msg}))
})
})
.catch((err) => {
setFormObj(state => ({...state, error: err.msg}))
})
}
return (
<div >
{/*Will Render Something based on above code*/}
</div>
)
}
我只使用了一种 useState 来在一个对象中存储诸如“名称”、“链接”、“错误”之类的属性。因为我想将 FormObj 和 validateLinkAndCreateProject 的逻辑保持在一起。所有三个属性都只使用一个 useEffect。因此,我认为最好将所有三个属性都保留在 useState 中,而不是创建 3 个不同的 usestate。
但是我的经理和我的技术架构师告诉我要创建 3 个 useState,每个属性一个 useState,即名称、链接和错误的单独 useState。根据他们的说法,永远不要在 useState 中创建对象,例如 useState({name: "", link: "", error: ""})。我应该始终为每个属性创建单独的 useState。
据我了解,在较旧的 react 中,我们曾经只有一种状态,在一个对象中曾经有 30 到 40 个属性。随着 React 钩子的引入,按照“关注点分离”,我们假设将相关逻辑与其余代码分开。因此,我们最终会得到 5 到 6 个状态,其中包含具有 4 到 5 个属性的对象。
注意:这里的“关注点分离”意味着以依赖状态 + useEffect + useRef 等保持在一起的方式破坏类代码。下面是来自 React 文档的引用。
Hooks 让您可以根据内容将一个组件拆分为更小的函数 件是相关的(例如设置订阅或获取 数据),而不是根据生命周期方法强制拆分。
我想我错过了什么吗??,可以创建 useState({name: "", link: "", error: ""})。要么 我应该为它们中的每一个创建单独的状态吗?
【问题讨论】:
-
你好,你可以使用 useReducer 钩子,reactjs.org/docs/hooks-reference.html#usereducer
标签: javascript reactjs react-hooks use-effect use-state