2016-11-27 61 views
14

假设我有一个React组件 - 不管是否愚蠢 - 我想从商店中获取一些东西,并将其放入一个变量中,以使我的代码更加简洁。我应该使用const还是让?显然,国家会改变。const或let in React组件

下面是我正在谈论的一个例子。同样,我想强调一下,当用户与我的应用进行交互时,myValues会发生变化。

class MyComponent extends Component { 

    render() { 

     // Here, should I use const or let? 
     const myValues = this.props.someData; 

     return(
      <div> 

      {myValues.map(item => (
        <SomeOtherComponent key={item.id} data={item} /> 
       ))} 

      </div> 
     ); 
    }; 
} 

function mapStateToProps(state) { 
    return { 
     someData: state.someValuesComingFromApi 
    } 
} 

export default connect(mapStateToProps)(MyComponent) 

回答

12

const VS let大多是在一个代码块 “改变” 的事情。唯一要紧的在这样的情况:

const myValues = this.props.someData; 
if (*some condition*) { 
    myValues = []; 
} 

在这种情况下,你需要使用让,因为你正在改变赋给变量myValues值:

let myValues = this.props.someData; 
if (*some condition*) { 
    myValues = []; 
} 

如果props.someData正在发生变化,就会触发重新渲染组件。所以const vs let不会进来玩。整个render方法重新运行。

所以说,我在你描述的情况下使用const。除非您直接操纵变量的有价值,否则使用const

1

让我参考ESLint规则prefer-const它在这个问题上有很好的解释。

我唯一可以添加:

喜欢,如果你不知道,开始所有的变量与const

即使以后发生变异它,调试器会通知你

16

const是一个信号,表示变量不会被重新分配

let是一个信号,即变量可被重新分配

其他事情思考:

  • 使用const默认
  • 使用let仅当需要重新绑定
  • const不表示th在一个值是'不变'或不可变的。

    const foo = {}; 
    foo.bar = 10; 
    console.log(foo.bar); // --> 10 
    

    只有绑定是不可变的。即,使用一个赋值操作符或一元或后缀 - 或++运算符上的常量变量抛出TypeError异常

  • ES6 constlethoisted太。尽管标识符与编译时具有相同的内存引用,但在代码中声明之前不能访问它们。(但不像我们认为的声明将物理移动到范围的顶部);)