2017-10-30 28 views
0

私はこのチュートリアルと一緒に従うことをしようとしていますに書き込む方法:https://www.viget.com/articles/building-a-multi-step-registration-form-with-reactが反応 - 構文 - ES6

このチュートリアルでは、ES6を使用していないので、私は立ち往生していますので、私は、違いを学ぶことをしようとしていますチュートリアル文書に問題がある場合は、これと同じ時間を計算してください。

このコードブロックでは構文エラーが発生します。それは、私が '、'を持っているはずの '、'を使ったと言います。それがES6に関係しているかどうかはわかりません。私はカンマを置き換えようとしましたが、同じエラーが発生します。

saveValues: function(field_value) { 
    return function() { 
     fieldValues = assign({}, fieldValues, field_value) 
    }.bind(this)() 
    }, 

これは間違っていますか?

完全なページは、現在のように設定されて

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import { Link } from 'react-router-dom'; 

var AccountFields = require('./AccountFields'); 
var Confirmation = require('./Confirmation'); 
var Success   = require('./Success'); 
var SurveyFields = require('./SurveyFields'); 
var assign   = require('object-assign'); 


var fieldValues = { 
    name :null, 
    email :null, 
    password :null, 
    organisation :null, 
    interest :[] 
} 



// import { Button } from 'react-bootstrap'; 
// import * as ReactBootstrap from 'react-bootstrap' 

class Registration extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = function() { 
    return { 
     step: 1 
    } 
    }, 

    saveValues: function(field_value) { 
    return function() { 
     fieldValues = assign({}, fieldValues, field_value) 
    }.bind(this)() 
    }, 

    nextStep: function() { 
    this.setState({ 
     step : this.state.step + 1 
    }) 
    }, 

    previousStep: function() { 
    this.setState({ 
     step : this.state.step - 1 
    }) 
    }, 

    submitRegistration: function() { 
    switch (this.state.step) { 
     case 1: 
     return <AccountFields fieldValues={fieldValues} 
           nextStep={this.nextStep} 
           previousStep={this.previousStep} 
           saveValues={this.saveValues} 
       /> 

     case 2: 
      return <SurveyFields fieldValues={fieldValues} 
           nextStep={this.nextStep} 
           previousStep={this.previousStep} 
           saveValues={this.saveValues} 
        /> 

     case 3: 
      return <Confirmation fieldValues={fieldValues} 
           nextStep={this.nextStep} 
           submitRegistration={this.submitRegistration} 
       /> 

     case 4: 
      return <Success fieldValues={fieldValues} /> 
    } 
    }, 

    render() { 
    return (
     <main> 
     <span className="progress-step"> Step {this.state.step}</span> 
     <progress className="progress"></progress> 
     {this.showStep()} 
     </main> 

    ) 
    } 

export.default = Registration; 

UPDATED ATTEMPT

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import { Link } from 'react-router-dom'; 

var AccountFields = require('./AccountFields'); 
var Confirmation = require('./Confirmation'); 
var Success   = require('./Success'); 
var SurveyFields = require('./SurveyFields'); 
var assign   = require('object-assign'); 


var fieldValues = { 
    name :null, 
    email :null, 
    password :null, 
    organisation :null, 
    interest :[] 
} 



// import { Button } from 'react-bootstrap'; 
// import * as ReactBootstrap from 'react-bootstrap' 

class Registration extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = function() { 
    return { 
     step: 1 
    } 
    } 

    saveValues(field_value) { 
    return function() { 
     fieldValues = assign({}, fieldValues, field_value) 
    }.bind(this)() 
    } 

    nextStep() { 
    this.setState({ 
     step : this.state.step + 1 
    }) 
    } 

    previousStep() { 
    this.setState({ 
     step : this.state.step - 1 
    }) 
    } 

    submitRegistration() { 
    switch (this.state.step) { 
     case 1: 
     return <AccountFields fieldValues={fieldValues} 
           nextStep={this.nextStep} 
           previousStep={this.previousStep} 
           saveValues={this.saveValues} 
       /> 

     case 2: 
      return <SurveyFields fieldValues={fieldValues} 
           nextStep={this.nextStep} 
           previousStep={this.previousStep} 
           saveValues={this.saveValues} 
        /> 

     case 3: 
      return <Confirmation fieldValues={fieldValues} 
           nextStep={this.nextStep} 
           submitRegistration={this.submitRegistration} 
       /> 

     case 4: 
      return <Success fieldValues={fieldValues} /> 
    } 
    } 

    render() { 
    return (
     <main> 
     <span className="progress-step"> Step {this.state.step}</span> 
     <progress className="progress"></progress> 
     {this.showStep()} 
     </main> 

    ) 
    } 


    } 
} 

export.default = Registration; 
+0

[クラス内のメソッドの定義](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes#Prototype_methods)の構文は次のとおりです。それは ':'を伴わない。また、クラス定義のために '}'が閉じていないようです。 – 4castle

+0

ありがとう@ 4castle - :チュートリアルから来た - それは間違っていると思いますか? saveValuesクラスに欠落していることを意味しますか?そのブロックには{}の開閉数が等しくあります。申し訳ありませんが、明らかに、私は学ぶのが遅いですが、出発点をどこで見つけるかは不明です。 – Mel

+0

私はあなたの更新されたコードをWebstormに貼り付けました。コンストラクタの最後に "}"がありません(... { – Swards

答えて

1

カップルの事 - あなたのようなオブジェクトを構築ない、クラス内の関数や静的変数を定義しているがあなたは慣れています。

Javascriptクラスを見て、constructor()関数の詳細を学習します。最後にコンマは必要ありません。

constructor(props) { 
    super(props); 
    this.state = function() { 
    return { 
     step: 1 
    } 
    }, // <----------- 

そして、あなたはそれが

saveValues() { 
    ... 
} 

などだろうクラスの関数を定義するために、代わりにこの

saveValues: function 

のような関数の名前/値のペアを識別しません。

saveValues =() => { 
    ... 
} 

バインドthis

簡単な構文の問題をすばやく見つけるのに役立つIDEをお勧めします。 WebStormは時間を節約し、多くの問題はリンターによって発見され、迅速に公開されます。

+0

@Swardsに感謝します。私はJetBrainsのRuby IDEを理解しようとしていましたが、理解できませんでした。私は今、アトムを使っていますが、JBにもう一度JSを試してみましょう。私は実際これを理解できません:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes#Prototype_methods。私は試行を更新しましたが、それでも同じエラーが発生します。本当に馬鹿だと感じていますが、この参考資料にダミーガイドがありますか? – Mel

+1

それをつけると、思ったよりも簡単です。この本はhttps://stackoverflow.com/users/717950/axel-rauschmayer http://exploringjs.com/es6/ch_core-features.htmlを説明するのに最適です – Swards

+0

私は5年間と1年間学習しようとしています月。毎日4時間。私はuniに戻って、より短い時間で完全なCSプログラムを学ぶことができました。私は本当に始まる方法にまだまだ固執しています。明らかにこれをスムーズに学習することはありません。参考資料をありがとう。私は今週末にこれを試しています。 – Mel

0

ここで私が気づいたことがいくつかあります。まず、stateは関数として定義され、オブジェクトを返します。最初にそれをオブジェクトとして定義するだけではどうですか?状態が正常に定義されている方法についてのドキュメントについてはこちらを参照してください:https://reactjs.org/docs/state-and-lifecycle.html

また、あなたがthisインラインにあなたの機能を結合しています。必ずしもアンチパターンである必要はありませんが、コードを読むときに混乱が増えます。これらの関数をコンストラクタにバインドすることを検討することをお勧めします。また、状態自体の一部として容易に定義できるconstオブジェクトを定義しました。言うまでもなく、私が気づいたセミコロンやその他の構文関連の問題がたくさんあります。

は、ここで私は、この(ES6)をリファクタリングする方法をです:

import React from 'react'; 
import AccountFields from "./AccountFields"; 
import Confirmation from "./Confirmation"; 
import Success from "./Success"; 
import SurveyFields from "./SurveyFields"; 

export default class Registration extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     step: 1, 
     fieldValues: { 
     name: null, 
     email: null, 
     password: null, 
     organisation: null, 
     interest: [] 
     } 
    }; 

    this.saveValues = this.saveValues.bind(this); 
    this.nextStep = this.nextStep.bind(this); 
    this.previousStep = this.previousStep.bind(this); 
    } 

    saveValues(newFieldValue) { 
    this.setState({ 
     fieldValues: newFieldValue, 
    }); 
    } 

    nextStep() { 
    this.setState({ 
     step: this.state.step++ 
    }); 
    } 

    previousStep() { 
    this.setState({ 
     step: this.state.step -- 
    }); 
    } 

    submitRegistration() { 
    switch (this.state.step) { 
     case 1: 
     return (
      <AccountFields 
      fieldValues={this.state.fieldValues} 
      nextStep={this.nextStep} 
      previousStep={this.previousStep} 
      saveValues={this.saveValues} 
      />); 

     case 2: 
     return (
      <SurveyFields 
      fieldValues={this.state.fieldValues} 
      nextStep={this.nextStep} 
      previousStep={this.previousStep} 
      saveValues={this.saveValues} 
      />); 

     case 3: 
     return (
      <Confirmation 
      fieldValues={this.state.fieldValues} 
      nextStep={this.nextStep} 
      submitRegistration={this.submitRegistration} 
      />); 

     case 4: 
     return <Success fieldValues={this.state.fieldValues} />; 

     // You should probably add a default case here. 
    } 
    } 

    render() { 
    return (
     <main> 
     <span className="progress-step"> Step {this.state.step}</span> 
     <progress className="progress"/> 
     {/* Use the state, and not a non-existent function */} 
     `{this.state.step}/4` 
     </main> 

    ); 
    } 
} 

私は非常にあなたはあまりES5掘り下げるしようとする前に、チュートリアルに反応一読をお勧めします - > ES6はパース(それはセミのように見える場合でも、 -decentチュートリアル)。いくつかの大きな違いがありますが、このチュートリアルの基本的なロジックが多少不足しているように見えます。

+0

私を助けてくれてありがとう。私はあなたの例を使ってみましたが、反応物質をもう一度見直した後、私はそれをどのように使用するかについてまだ不明です。 ./~/react-dom/lib/traverseAllChildren.jsでエラーが発生しました。 モジュールが見つかりません:エラー: '/ Users'の 'react/lib/ReactCurrentOwner'を解決できません。私は数日間それを残して、うまくいけば新しい目で戻ってみるよ。とにかくありがとうございました。 – Mel

関連する問題