React:状態のパラメーターが未定義でないかどうかをどのように確認できますか?

エノイ

こんにちは、お時間をいただきありがとうございます!

私は現在、React、Fluxチュートリアルをフォローしています:https//app.pluralsight.com/library/courses/react-flux-building-applications/table-of-contents

私が直面している困難は、新しい著者を作成しようとすると、それが出力するフォームに書き込むときに、次のことです。

Uncaught TypeError: Cannot read property 'firstName' of undefined
    at ManageAuthorPage._this.setAuthorState (manageAuthorPage.js:20)
    at HTMLUnknownElement.callCallback (react-dom.development.js:542)
    at Object.invokeGuardedCallbackDev (react-dom.development.js:581)
    at Object.invokeGuardedCallback (react-dom.development.js:438)
    at Object.invokeGuardedCallbackAndCatchFirstError (react-dom.development.js:452)
    at executeDispatch (react-dom.development.js:836)
    at executeDispatchesInOrder (react-dom.development.js:858)
    at executeDispatchesAndRelease (react-dom.development.js:956)
    at executeDispatchesAndReleaseTopLevel (react-dom.development.js:967)
    at Array.forEach (<anonymous>)
    at forEachAccumulated (react-dom.development.js:935)
    at processEventQueue (react-dom.development.js:1112)
    at runEventQueueInBatch (react-dom.development.js:3607)
    at handleTopLevel (react-dom.development.js:3616)
    at handleTopLevelImpl (react-dom.development.js:3347)
    at batchedUpdates (react-dom.development.js:11082)
    at batchedUpdates (react-dom.development.js:2330)
    at dispatchEvent (react-dom.development.js:3421)
ManageAuthorPage._this.setAuthorState @ manageAuthorPage.js:20
callCallback @ react-dom.development.js:542
invokeGuardedCallbackDev @ react-dom.development.js:581
invokeGuardedCallback @ react-dom.development.js:438
invokeGuardedCallbackAndCatchFirstError @ react-dom.development.js:452
executeDispatch @ react-dom.development.js:836
executeDispatchesInOrder @ react-dom.development.js:858
executeDispatchesAndRelease @ react-dom.development.js:956
executeDispatchesAndReleaseTopLevel @ react-dom.development.js:967
forEachAccumulated @ react-dom.development.js:935
processEventQueue @ react-dom.development.js:1112
runEventQueueInBatch @ react-dom.development.js:3607
handleTopLevel @ react-dom.development.js:3616
handleTopLevelImpl @ react-dom.development.js:3347
batchedUpdates @ react-dom.development.js:11082
batchedUpdates @ react-dom.development.js:2330
dispatchEvent @ react-dom.development.js:3421

そしてブラウザではそれは詳細です:

×
TypeError: Cannot read property 'firstName' of undefined
ManageAuthorPage._this.setAuthorState
C:/Users/YonePC/WebstormProjects/flux/src/components/authors/manageAuthorPage.js:20
  17 | setAuthorState = (event) => {
  18 |     let field = event.target.name;
  19 |     let value = event.target.value;
> 20 |     if (this.state.author.firstName !== null) {
  21 |         this.state.author[field] = value;
  22 |     } else {
  23 |         this.state = {
View compiled
▶ 16 stack frames were collapsed.
This screen is visible only in development. It will not appear if the app crashes in production.
Open your browser’s developer console to further inspect this error.

ご覧のとおり、this.state.author.firstNameがnullであるかどうかを確認して、作成中の作成者に新しい状態を作成しようとしました。そうでない場合は、既存の状態を編集しているので、書いて更新してください。

manageAuthorPage.js

import React from 'react';
import {AuthorForm} from "./authorForm";
import toastr from 'toastr';
import AuthorStore from "../../stores/authorStore";
import {AuthorActions} from "../../actions/myAuthorActions";

class ManageAuthorPage extends React.Component {
    state = {
        author: {
            id: '',
            firstName: '',
            lastName: '',
        },
    };

    setAuthorState = (event) => {
        let field = event.target.name;
        let value = event.target.value;
        if (this.state.author.firstName !== null) {
            this.state.author[field] = value;
        } else {
            this.state = {
                author: {
                    id: '',
                    firstName: '',
                    lastName: '',
                },
            };
        }
        return this.setState({author: this.state.author});
    };

    saveAuthor = (event) => {
        event.preventDefault();
        AuthorActions.createAuthor(this.state.author);
        toastr.success('Author saved ;=)');
    };

    componentDidMount = () => {
        const queryAuthorId = this.props.location.pathname; //from the path '/author:id'
        const authorId = queryAuthorId.substr(queryAuthorId.lastIndexOf("/") + 1);

        if (authorId) {
            this.setState({author: AuthorStore.getAuthorById(authorId)});
        }
        // console.log(authorId.substr(authorId.lastIndexOf("/") + 1));

    };

    render() {
        return (
            <AuthorForm author={this.state.author}
                        onChange={this.setAuthorState}
                        onSave={this.saveAuthor}/>
        );
    };
}

export {ManageAuthorPage}

また、この問題にとって重要である可能性があるため、子コンポーネントも含めます。

import React from 'react';
import {Input} from "../common/textInput";
import Link from "react-router-dom/es/Link";

class AuthorForm extends React.Component {


    render() {
        const {firstName = '', lastName = '', id = ''} = this.props.author || {};

        return (
            <form>
                <h1>Manage author</h1>
                <Input
                    name="firstName"
                    label="First Name"
                    value={firstName}
                    onChange={this.props.onChange}
                />

                <Input
                    name="lastName"
                    label="Last Name"
                    value={lastName}
                    onChange={this.props.onChange}
                />

                <button type="submit" value="Save" className="btn btn-default" onClick={this.props.onSave}><Link
                    to="/authors">Save
                    author</Link>
                </button>
            </form>
        );
    }
}

export {AuthorForm}

そして、私はより深い子供はこの困難とは関係がないと思いますが、明確にするために私はそれを含めます:

import React from 'react';
import PropTypes from 'prop-types';

class Input extends React.Component {


    render() {
        let wrapperClass = 'form-group';
        if (this.props.error && this.props.error.length > 0) {
            wrapperClass += ' ' + 'has-error';
        }
        return (
            <div className={wrapperClass}>
                <label htmlFor={this.props.name}>{this.props.label}</label>
                <div className="field">
                    <input type="text"
                           name={this.props.name}
                           className="form-control"
                           placeholder={this.props.placeholder}
                           ref={this.props.name}
                           value={this.props.value}
                           onChange={this.props.onChange}
                    />
                    <div className="input">{this.props.error}</div>
                </div>
            </div>
        );
    }
}


export {Input};

さらに、チュートリアルに従って作成した完全なアプリがここにありますhttps//github.com/YoneMoreno/ReactFluxAuthorsPageTutorial

私も情報を読みました:

https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/undefined

JavaScriptで「未定義」をチェックする方法は?

変数が「未定義」か「null」かを判断する方法は?

私たちを手伝ってくれますか???

お時間をいただきありがとうございます。

toufek khoury

を注意 :

null === undefined // false! 

まあ言ってみれば ..

let a = undefined 
a === undefined // true 

だが ..

a === null // false
a == null // true

したがって、このようなものがここであなたを助けるかもしれません:

 if (this.state.author.firstName !== undefined) { 
        this.state.author[field] = value;
    } 

または、nullとundefinedの両方をチェックします

 if (this.state.author.firstName != null) {  
            this.state.author[field] = value;
        } 

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JavaScriptで3つのパラメーターがnullまたは未定義かどうかを確認するにはどうすればよいですか?

分類Dev

渡された引数の状態が変更された場合に、その引数が正しいパラメーターを使用しているかどうかを確認するにはどうすればよいですか?

分類Dev

ノードは、どのノードがクラスターの現在の状態を確認したかをどのように知るのですか?

分類Dev

データテーブル内の状態を確認するにはどうすればよいですか?

分類Dev

構造体tmが無効な状態のままになっているかどうかを確認するにはどうすればよいですか?

分類Dev

オブジェクトが未定義の場合、特定のキーが未定義かどうかを確認するにはどうすればよいですか?

分類Dev

PHP変数スペースの内部状態をどのように確認できますか?

分類Dev

ハードドライブの状態を確認するにはどうすればよいですか?

分類Dev

タイプTがパラメーターパックTsの中にあることをどのように確認できますか?

分類Dev

サブクラスのメソッド(パラメーター)に、実装されたインターフェースで定義された注釈があるかどうかを確認するにはどうすればよいですか?

分類Dev

SQLのパラメータに基づいて、特定のフィールドがnullでないかどうかを確認します

分類Dev

Delphi Mocks Frameworkでパラメータの内容を確認するにはどうすればよいですか?

分類Dev

アニメーターからの特定のアニメーション状態が実行されているかどうかを確認するにはどうすればよいですか?

分類Dev

--verbose フラグがオンになっているかどうかを私のうなり声タスクはどのように確認できますか?

分類Dev

未定義かどうかを確認しているときに、Ifステートメントが未定義エラーをスローするのはなぜですか?

分類Dev

RPCでフローの現在の状態を確認するにはどうすればよいですか?

分類Dev

サーバーがまだアクティブな状態でブラウザ接続を確認するにはどうすればよいですか?

分類Dev

パラメータ['変数になり得る']が配列にあるかどうかを確認するにはどうすればよいですか?

分類Dev

渡すパラメータのいずれかが未定義の場合、URLの問題を修正するにはどうすればよいですか?

分類Dev

入力パラメータの形式を確認するにはどうすればよいですか?

分類Dev

パラメータがnullでない場合、ColumnAの値がColumnBにあるかどうかを確認します(SQL-Server)

分類Dev

残りのパラメーターを無視したいときに、正しいパラメーターでサービスを呼び出しているかどうかを確認するにはどうすればよいですか?

分類Dev

Kubernetesでgoサービスの状態を確認するにはどうすればよいですか?

分類Dev

この関数のx、yパラメーターがかなり長い間同じであるかどうかを確認しようとしていますが、機能していないようです

分類Dev

データ構造がテンプレートパラメータの場合、操作によってイテレータが無効になるかどうかを確認するにはどうすればよいですか?

分類Dev

環境変数が未定義かどうかを確認できないのはなぜですか?

分類Dev

ルートがReact-Routerv4のパターンと一致するかどうかを確認するにはどうすればよいですか?

分類Dev

パラメータパックに正確なタイプが正確な順序で含まれているかどうかを確認する方法

分類Dev

ifステートメントで単語に文字「e」が含まれているかどうかを確認するときに、「Operator」==「タイプ「char」および「string」」のオペランドに適用できないのはなぜですか。

Related 関連記事

  1. 1

    JavaScriptで3つのパラメーターがnullまたは未定義かどうかを確認するにはどうすればよいですか?

  2. 2

    渡された引数の状態が変更された場合に、その引数が正しいパラメーターを使用しているかどうかを確認するにはどうすればよいですか?

  3. 3

    ノードは、どのノードがクラスターの現在の状態を確認したかをどのように知るのですか?

  4. 4

    データテーブル内の状態を確認するにはどうすればよいですか?

  5. 5

    構造体tmが無効な状態のままになっているかどうかを確認するにはどうすればよいですか?

  6. 6

    オブジェクトが未定義の場合、特定のキーが未定義かどうかを確認するにはどうすればよいですか?

  7. 7

    PHP変数スペースの内部状態をどのように確認できますか?

  8. 8

    ハードドライブの状態を確認するにはどうすればよいですか?

  9. 9

    タイプTがパラメーターパックTsの中にあることをどのように確認できますか?

  10. 10

    サブクラスのメソッド(パラメーター)に、実装されたインターフェースで定義された注釈があるかどうかを確認するにはどうすればよいですか?

  11. 11

    SQLのパラメータに基づいて、特定のフィールドがnullでないかどうかを確認します

  12. 12

    Delphi Mocks Frameworkでパラメータの内容を確認するにはどうすればよいですか?

  13. 13

    アニメーターからの特定のアニメーション状態が実行されているかどうかを確認するにはどうすればよいですか?

  14. 14

    --verbose フラグがオンになっているかどうかを私のうなり声タスクはどのように確認できますか?

  15. 15

    未定義かどうかを確認しているときに、Ifステートメントが未定義エラーをスローするのはなぜですか?

  16. 16

    RPCでフローの現在の状態を確認するにはどうすればよいですか?

  17. 17

    サーバーがまだアクティブな状態でブラウザ接続を確認するにはどうすればよいですか?

  18. 18

    パラメータ['変数になり得る']が配列にあるかどうかを確認するにはどうすればよいですか?

  19. 19

    渡すパラメータのいずれかが未定義の場合、URLの問題を修正するにはどうすればよいですか?

  20. 20

    入力パラメータの形式を確認するにはどうすればよいですか?

  21. 21

    パラメータがnullでない場合、ColumnAの値がColumnBにあるかどうかを確認します(SQL-Server)

  22. 22

    残りのパラメーターを無視したいときに、正しいパラメーターでサービスを呼び出しているかどうかを確認するにはどうすればよいですか?

  23. 23

    Kubernetesでgoサービスの状態を確認するにはどうすればよいですか?

  24. 24

    この関数のx、yパラメーターがかなり長い間同じであるかどうかを確認しようとしていますが、機能していないようです

  25. 25

    データ構造がテンプレートパラメータの場合、操作によってイテレータが無効になるかどうかを確認するにはどうすればよいですか?

  26. 26

    環境変数が未定義かどうかを確認できないのはなぜですか?

  27. 27

    ルートがReact-Routerv4のパターンと一致するかどうかを確認するにはどうすればよいですか?

  28. 28

    パラメータパックに正確なタイプが正確な順序で含まれているかどうかを確認する方法

  29. 29

    ifステートメントで単語に文字「e」が含まれているかどうかを確認するときに、「Operator」==「タイプ「char」および「string」」のオペランドに適用できないのはなぜですか。

ホットタグ

アーカイブ