代码之家  ›  专栏  ›  技术社区  ›  AConsumer

关于React Mobx中行动需求的问题

  •  1
  • AConsumer  · 技术社区  · 7 年前

    import React from "react"
    import { observable } from "mobx";
    import { observer } from "mobx-react"
    import { computed, action } from "mobx"
    
    @observer
    export default class Dice extends React.Component {
    
        @observable
        value = 1;
    
        @computed  
        get result() {
            return this.value > 3 ? "YOU WIN" : "YOU LOSE"
        }
    
        
    
        @action    
        handleRoll = () => {
    
            this.value = Math.floor(Math.random() * 6) + 1
        }
    
        render() {
    
            return (
                <div>
                    <br />
                    <button onClick={this.handleRoll}>Roll Dice</button> <br />
                    <p>The value is {this.value}</p>
                    <p>{this.result}</p>
                </div>
            )
        }
    
    }

    现在,我已经使用了handleRoll函数的动作装饰器。我使用它是因为我的原始状态发生了变化,即每当我单击掷骰子按钮时,值都会发生变化(很可能)。现在,即使我删除了action decoartor,但仍然一切正常,没有错误。现在的问题是,如果我们能够完成改变状态的任务,那么为什么要采取行动呢?

    1 回复  |  直到 6 年前
        1
  •  1
  •   mtyaka    6 年前

    默认情况下,在mobx中不需要使用动作来更改状态,但在较大的代码库中,这是一种良好的最佳实践| https://mobx.js.org/refguide/action.html#when-to-use-actions] 。如果启用严格模式,如果您尝试在操作之外修改状态,mobx将抛出错误。

    要在mobx 4.0.0及更新版本中启用严格模式,请使用 mobx.configure({enforceActions: true}) 。在旧版本的mobx中,这是通过 mobx.useStrict(true)