可变或不变的全局状态模式会做出反应吗?

时间:2019-11-22 07:45:57

标签: reactjs immutability mutable state-management

我想为我的下一个应用程序创建一个全局状态模式。但是我不知道该选择可变方法还是不变的方法。让我展示一些示例,说明我的两个带有伪反应的选项。

不变

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或多或少地比较这两种模式。我知道这是一个困难的话题,因为两者各有利弊。但是我在这里听到所有有助于我做出决定的意见。

0 个答案:

没有答案