React setState:按字符串设置嵌套属性

时间:2016-10-18 14:02:03

标签: reactjs

我在React面临一些奇怪的事情,我认为可能会这样做,但我不知道如何。

我的目标:更新组件状态的特定属性,该属性可以是嵌套属性。但!我想动态更新它(在一堆输入上使用onChange调用,不想编写30个onChange函数,我想编写一个通用函数)。

有效的示例:

this.state = { value: 0 }

然后:

var attribute = 'value'
var value = 'myvalue'
this.setState({[attribute]:value})

不起作用的示例:

this.state = { nested: { value: 0 } }

然后:

var attribute = 'nested.value'
var value = 'myvalue'
this.setState({[attribute]:value})

我可以拥有尽可能多的嵌套级别。我想找到一种通用且易于处理的方法来处理它。

我创建了一个JSFiddle来重现这个问题,因为我正在尝试使用onchange函数来实现它:http://jsfiddle.net/n61kv6gy/

有没有人有想法?

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你可以在onChange函数中尝试这样的事情:

class SimpleFactory
{
    public function build($model)
    {
        $obj = __NAMESPACE__ . '\\models\\' . $model . '.php';
        if (class_exists($obj)) {
            return new $obj();
        }
    }
}

class Controller 
{
    private $factory;

    public function __construct()
    {
        $this->factory = new SimpleFactory();
    }

    public function someMethod()
    {
        // this method has a dependency
        $oneModel = $this->factory->build('oneModel');
    }
}

首先克隆您的状态,然后进行更改,最后更新状态。

这是jsfiddle

答案 1 :(得分:0)

OK堆栈溢出注释功能非常缺乏。我在这里回答@Boky:

嗨,非常感谢您的回答。这部分地完成了工作。您如何修改代码以允许我们绑定这3个属性?

{
   value1: 1,
   nested: {
      value2: 2,
      nestedAgain: {
         value3: 3
      }
   }
}