根据React.createClass和React.Component之间的比较

时间:2016-04-01 18:30:05

标签: reactjs

所有

我是React的新手,我想知道是否有人可以在createClassextends Component之间进行比较

第一个问题是我们需要React.Component的原因,因为我们已经有了createClass?

其次,具体的是:

1。在extends Component模式下this.state是什么样的:我尝试在构造函数()中使用this.state,但是作为undifined 失败,这是否意味着我必须构建{{1通过给它整个状态树来自己?

这两种模式都有一个问题:

如果我想将setState()与复杂对象(具有嵌套数据结构)一起使用,我怎么才能仅根据部分进行更新,例如,说状态如下:

this.state

我怎样才能使用setState()更新高度?我应该像

一样使用它吗?
State = {
    title: "",
    attrs: {
        size: {
            width:"100px",
            height: "100px"
        }
    }
}

由于

2 个答案:

答案 0 :(得分:1)

React.createClass是定义反应组件的旧方法。 class当时并不存在于javascript中,所以这就是React实施的'类';

import React, {Component} from 'react';
class ReactComponent extends Component

是基于es2015类定义反应组件的更新方法。

无论您如何定义组件,状态都应该以相同的方式运行。

在构造函数中,您应该能够定义this.state

我会研究Flux架构并实现Redux或AltJS来帮助实现数据流架构。

在你的州,如果你有一个对象:

q = {
  title: "Test",
  body : "Test123"
}

并希望更新标题...您必须执行以下操作:

var x = this.state.q;
x.title = "New Title";
this.setState({ q: x });

您无法修改状态中的对象属性。您必须使用整个新对象更新属性和setState。

答案 1 :(得分:1)

  1. 此主题有很多答案:linklink

  2. 状态应该在构造函数中初始化,然后再执行 - undefined:

    public constructor(props, context)
    {
        super(props, context)
    
        this.state = {
            Clients: [],
        };
    }
    
  3. 您可以随时更新状态的一部分,然后强制更新:

    this.state.attrs.size.height = 200;
    this.forceUpdate(); 
    

    或者只是更新状态对象并再次使用setState重新分配。