我想为我的下一个应用程序创建一个全局状态模式。但是我不知道该选择可变方法还是不变的方法。让我展示一些示例,说明我的两个带有伪反应的选项。
不变
let globalState = { name: 'Enzo' }
function setGlobalName(name) {
globalState = merge(globalState, { name })
notifySubscriber1(name)
notifySubscriber2(name)
// ... and so on
}
function Component() {
const [state, setState] = useState(getGlobalState())
function notifySubscriber1(name) {
setState(merge({}, state, { name }))
}
return <Text onClick={setGlobalName('John')}>{state.name}</Text>
}
可变
const globalState = { name: 'Enzo' }
function setGlobalName(name) {
globalState.name = name
notifySubscriber1()
notifySubscriber2()
// ... and so on
}
function Component() {
const state = getGlobalState()
const [n, forceUpdate] = useState(0)
function notifySubscriber1() {
forceUpdate(n + 1)
}
return <Text onClick={setGlobalName('John')}>{state.name}</Text>
}
问题是我不知道该采取什么方法。显然,可变的性能要好得多,因为每次我们进行突变时,不变的对象都会复制状态,而如果存储/状态是一个巨大的对象,这将是一个问题。
但是,另一方面,我不知道这是可变的方法。
我们可以将Mobx和Redux或多或少地比较这两种模式。我知道这是一个困难的话题,因为两者各有利弊。但是我在这里听到所有有助于我做出决定的意见。