const或let in React组件

Sam*_*Sam 27 ecmascript-6 reactjs

假设我有一个React组件 - 哑或不 - 我想从商店中获取一些内容并将其放入变量中以使我的代码更简洁一些.我应该使用const还是让?显然,国家将发生变化.

这是我正在谈论的一个例子.同样,我想强调,当用户与我的应用程序交互时,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)
Run Code Online (Sandbox Code Playgroud)

Yad*_*ran 36

const是一个不会重新分配变量的信号.

let是一个可以重新分配变量的信号

需要思考的其他事项:

  • const默认使用
  • 使用let仅当需要重新绑定
  • const 并不表示值是"常量"或不可变的.

    const foo = {};
    foo.bar = 10;
    console.log(foo.bar); // --> 10
    
    Run Code Online (Sandbox Code Playgroud)

    只有绑定是不可变的.即在const变量上使用赋值运算符或一元或后缀 - 或++运算符会引发TypeError异常

  • ES6 constlet吊起来了.尽管标识符在编译时具有相同的内存引用,但在代码中声明之前无法访问它们.(但不是因为我们认为声明会在范围内被移动到顶部);)

  • +1表示“ const并不表示值是'constant'或不可变的”。-当您只是在学习反应时,这感觉很奇怪,但是从技术上讲是有道理的 (2认同)

eri*_*-sn 24

constvs let主要与代码块中的"更改"有关.它只在这样的情况下才有意义:

const myValues = this.props.someData;
if (*some condition*) {
  myValues = [];
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您需要使用let,因为您正在更改分配给变量的值myValues:

let myValues = this.props.someData;
if (*some condition*) {
  myValues = [];
}
Run Code Online (Sandbox Code Playgroud)

如果props.someData正在更改它将触发重新呈现组件.因此,const vs let不会发挥作用.整个render方法重新运行.

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

  • @AnishArya 人们普遍认为不应再使用“var”,因为如果您不小心,它可能会导致令人惊讶的结果。声明为“var”的变量具有函数作用域,即。可以在声明它的函数内部访问。这可能会让习惯了块作用域编程语言(Java、C#、C++ 等)的开发人员感到困惑。声明为“let”或“const”的变量具有块作用域,即。只能在声明它的块内访问。请参阅 https://softwareengineering.stackexchange.com/questions/274342/is-there-any-reason-to-use-the-var-keyword-in-es6 (3认同)

Ole*_*Pro 6

让我参考 ESLint 规则首选常量它对这个问题有很好的解释。

我唯一可以补充的是:

如果您不确定,更喜欢以开始所有变量const

即使您稍后对其进行变异,调试器也会通知您