2017-02-27 88 views
0

我也跟着上meteorjs教程这里: https://www.meteor.com/tutorials/react/forms-and-events常量的值可以改变

代码的一种是使用常量。 const text = ReactDOM.findDOMNode(this.refs.textInput).value.trim();

据我在SO网站上看到的其他网站所知,const的值不能改变。但是,当我键入我的应用程序输入框中的任何文本时,不会为重新指定const值而抛出任何错误。

为什么会发生这种情况,并且我明白const错了?我希望有人能提前向我解释和感谢。

示例代码:

import React, { Component, PropTypes } from 'react'; 
import ReactDOM from 'react-dom'; 
import { createContainer } from 'meteor/react-meteor-data'; 

import { Tasks } from '../api/tasks.js'; 
...some lines skipped... 

// App component - represents the whole app 
class App extends Component { 
    handleSubmit(event) { 
    event.preventDefault(); 

    // Find the text field via the React ref 
    const text = ReactDOM.findDOMNode(this.refs.textInput).value.trim(); 

    Tasks.insert({ 
     text, 
     createdAt: new Date(), // current time 
    }); 

    // Clear form 
    ReactDOM.findDOMNode(this.refs.textInput).value = ''; 
    } 

    renderTasks() { 
    return this.props.tasks.map((task) => (
     <Task key={task._id} task={task} /> 

回答

1

两个letconst创建是块作用域的变量 - 他们只围绕着他们最里面块中存在。

function func() { 
    if (true) { 
    const tmp = 123; 
    } 
    console.log(tmp); // ReferenceError: tmp is not defined 
} 

在你的情况,每次运行handleSubmit功能,text是函数的范围新建的变量,而不是旧的,毁坏text秒。

更多关于此here

6

这常量被用来定义一个被调用每次进入输入时间函数中的局部变量。当函数完成执行后,它不再“存在”,所以下次调用该函数时不会覆盖它,而是再次创建它。

1

您对const关键字的假设是正确的!

这个函数是一个handleSubmit()功能,所以形式(我相信)提交时才会被调用。在这种情况下,const变量被创建,填充,使用,然后超出范围,一旦函数完成。

如果handleSubmit()被再次调用,它将创建一个新的变量。

3

@epiqueras提供了一个很好的答案,但了解const不是关于不变性也是很重要的。良好的信息在这里:https://mathiasbynens.be/notes/es6-const

ES6常量并不表明一个值是“不变”或一成不变的。一个 const值肯定可以改变。

常量之间的唯一区别,让是常量使 合同,没有重新绑定会发生。