2017-02-27 23 views
0

変更することができます。コードの https://www.meteor.com/tutorials/react/forms-and-eventsのConst値は、私がここにmeteorjsのチュートリアルに従っ

一つのconstを使用しています。 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 Sを破壊しています。

これに関する詳細here

6

のconstは、あなたが入力を入力するたびに呼び出される関数内でローカル変数を定義するために使用されていること。関数の実行が終了すると、もはや "存在"しないので、次に関数を呼び出して上書きしていないときは、再度作成します。

1

constキーワードの前提は正しいですか?

この関数はhandleSubmit()関数なので、フォーム(私は仮定)が送信されたときにのみ呼び出されます。この場合、関数が完了すると、const変数が作成され、移入され、使用され、スコープから外されます。

handleSubmit()を再度呼び出すと、新しい変数が作成されます。

3

@epiquerasは良い答えを提供しましたが、constが不変性に関するものではないことも知っておくことも重要です。ここに良い情報:https://mathiasbynens.be/notes/es6-const

ES6 constは、値が「定数」または不変であることを示しません。 const値は確実に変更できます。

constとletとの唯一の違いは、constによって がリバインディングが発生しないと契約するということです。

関連する問題