react-router-dom4と反応します-未定義のプロパティ 'params'を読み取ることができません

アーロン

私はReactの学習に取り組んでおり、それが私の組織のニーズに合っているかどうかを確認しています。私はそれがどのように機能するかを見るために取り組んできたサンプルアプリを持っています。私はここでいくつかの答えを調べましたが、私の問題を解決するものは見つかりませんでした。

「const {match:{params}} = this.props;」の「componentDidMount()」で「Uncaught(in promise)TypeError:Cannot read property'params'ofundefined」という問題が発生しています。 「」以下のコンポーネントのメソッド。同じメソッドを使用してURLからIDを取得する非常によく似たコンポーネントがあり、正常に動作します。なぜ一方が機能し、もう一方が機能しないのか、私は混乱しています。私はおそらくどこかで(おそらく複数の)新人の間違いを犯しているだけです、

ルーティング:

class App extends Component {
  render() {
    return (
      <BrowserRouter>
        <div>
          <Route path='/' component={BaseView} />
          <Route path='/test' component={NameForm} />
          <Route path='/home' component={Home} />
          <Route path='/quizzes' component={ViewQuizzes} />
          <Route path='/comment/:rank' component={GetCommentsId}  /*The one that works*//>
          <Route path='/comment/edit/:testid' component={GetCommentEdit} /*The one I'm having trouble with*//> 
          <Route path='/comments' component={GetCommentsAll} />
        </div>
      </BrowserRouter>
    );
  }
}

作業コンポーネント:

class GetCommentsId extends Component{

  constructor (props) {
    super(props)
    this.state = {
      Comments: [],
      output: "",
      wasClicked: false,
      currentComment: " ",
    }

    this.handleCommentChange = this.handleCommentChange.bind(this);
  }

  componentDidMount(){
    const { match: { params } } = this.props;
    const url = 'http://localhost:51295/api/Values/' + params.rank;

    axios.get(url).then(res => {
      const comments = res.data;
      this.setState({ comments });      
      this.output = (
        <div>
          <ul>
            { this.state.comments.map
            (
              comment => 
              (<Comment 
                QuizId = {comment.Rank} 
                FirstName = {comment.FirstName} 
                Comments = {comment.Comments}
                TestId = {comment.TestimonialId}
              />)
            )} 
          </ul>
        </div>
      );
      //console.log("From did mount: " + this.currentComment);
      this.forceUpdate();
    });
  }

  componentDidUpdate(){}

  handleCommentChange(event){
    //console.log("handle Comment Change activated");
  }

  handleClick(comment){
    this.wasClicked = true;
    this.currentComment = comment.Comments;
    console.log(comment.Comments);
    this.forceUpdate();
  }

  render () {
    if(this.output != null){
      if(!this.wasClicked){
        return (this.output);
      }
      else{
        console.log("this is the current comment: " + this.currentComment);
        return(
          <div>
            {this.output}
            <NameForm value={this.currentComment}/>
          </div>
        );
      }
    }
    return ("loading");
  }
}

動作していないもの:

class GetCommentEdit extends Component {
  constructor (props) {
    super(props)
    this.state = {
      Comments: [],
      output: "",
      match: props.match
    }
  }

  componentDidMount(){
    const { match: { params } } = this.props;
    const url = 'http://localhost:51295/api/Values/' + params.testid;

    axios.get(url).then(res => {
      const comments = res.data;
      this.setState({ comments });      
      this.output = (
        <div>
          <ul>
            { this.state.comments.map
            (comment => 
              (<EditComment 
                QuizId = {comment.Rank} 
                FirstName = {comment.FirstName} 
                Comments = {comment.Comments}
                TestId = {comment.TestimonialId}
              />)
            )} 
          </ul>
        </div>
      );
      //console.log("From did mount: " + this.currentComment);
      this.forceUpdate();
    });
  }

  render(){
    return(
      <div>
        {this.output}
      </div>
    );
  }
}
loelsonk

作業を実装する方法を示すための小さなアプリを作成しましたreact router v4

そこにパラメータが表示されていることがわかるように、各ルートには小道具のダンプがあります。

あなたのコードでは、なぜあなたがSwitchfromを使用ていないのかわかりませんreact-router v4。また、あなたのルートにはexactフラグ/プロパティがありませんこのようにして、コンポーネントビューを次々にレンダリングすることはありません。

サンドボックスへのリンク:https//codesandbox.io/s/5y9310y0zn

withRouterAppコンポーネントをラップアラウンドすることをお勧めします。Appコンポーネントにはを含めることはできません<BrowserRouter>

コードを確認する

状態を更新すると、コンポーネントの新しいレンダリングがトリガーされることに注意してください。

this.forceUpdate()ここでは不要なものを使用する代わりに、Promise / axiosリクエストの解決から取得した値で状態を更新します。

  // Bad implementation of componentDidMount
  // Just remove it
  this.output = (
    <div>
      <ul>
        {this.state.comments.map
          (
          comment =>
            (<Comment
              QuizId={comment.Rank}
              FirstName={comment.FirstName}
              Comments={comment.Comments}
              TestId={comment.TestimonialId}
            />)
          )}
      </ul>
    </div>
  );
  //console.log("From did mount: " + this.currentComment);
  this.forceUpdate();

ループ関数をrenderメソッドまたはその他のヘルパーメソッド内に移動します。これはヘルパーメソッドを使用するためのコードです。

renderComments() {
  const { comments } = this.state;

  // Just check if we have any comments
  // Return message or just return null
  if (!comments.length) return <div>No comments</div>;

  // Move li inside loop
  return (
    <ul>
      {comments.map(comment => (
        <li key={comment.id}>
          <Comment yourProps={'yourProps'} />
        </li>
      ))}
    </ul>
  )
};

isLoading初期状態のようなものを追加します。フェッチが終了するか、フェッチを開始するたびに、isLoading状態を切り替えます。

this.setState({ isLoading: true }); // or false

// Initial state or implement in constructor
state = { isLoading: true };

Renderメソッドは、何かをロードするたびにロードを表示し、renderComments()コメントを返します。クリーンで読みやすいコードを取得します。

render() {
  if (isLoading) {
    return <div>Loading...</div>
  }

  return (
    <div>
      {this.renderComments()}
    </div>
  );
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

未定義のプロパティ 'params'を読み取ることができません(React Router 4)

分類Dev

React-Routerは未定義のプロパティ文字列を読み取ることができません

分類Dev

未定義のプロパティ「履歴」を読み取ることができません(React Router 5のuseHistoryフック)

分類Dev

未定義のプロパティ 'params'を読み取れません、React

分類Dev

React-未定義のプロパティ 'params'を読み取れません

分類Dev

React Router:未定義のプロパティ 'pathname'を読み取れません

分類Dev

react-router "未定義のプロパティ 'push'を読み取れません"

分類Dev

React Router TypeError:未定義のプロパティ 'state'を読み取れません

分類Dev

React-router: "未定義のプロパティ 'transitionTo'を読み取れません"

分類Dev

未定義のプロパティ「ディスパッチ」を読み取ることができません。React

分類Dev

TypeError:Reactを使用して未定義のプロパティを読み取ることができません

分類Dev

Reactは未定義のプロパティマップを読み取ることができません

分類Dev

TypeError:reactで未定義のプロパティ 'reduce'を読み取ることができません

分類Dev

TypeError:react.jsで未定義のプロパティ 'map'を読み取ることができません

分類Dev

React BootstrapTypeaheadで未定義のプロパティ 'paginationOption'を読み取ることができません

分類Dev

Reactはif-blockで未定義のプロパティ 'setState'を読み取ることができません

分類Dev

Reactで未定義のプロパティ 'image_url'を読み取ることができません

分類Dev

reactで未定義のプロパティ「名前」を読み取ることができません

分類Dev

TypeError:未定義のReact、Ant選択のプロパティ「値」を読み取ることができません

分類Dev

未定義のReactフックのプロパティを読み取ることができません

分類Dev

React js:ErrorTypeError-未定義の配列のプロパティを読み取ることができません

分類Dev

未定義のreactのプロパティ小道具を読み取ることができません

分類Dev

React + Fetch + Json。TypeError:未定義のプロパティを読み取ることができません

分類Dev

React-未定義のプロパティを読み取ることができません

分類Dev

React-Native ListView:未定義のプロパティを読み取ることができません

分類Dev

React Native:未定義のプロパティ「長さ」を読み取ることができません

分類Dev

React admin:未定義のプロパティ 'filter'を読み取ることができません

分類Dev

React-TypeError:未定義のプロパティを読み取ることができません

分類Dev

react-data-grid、未定義のプロパティ 'map'を読み取ることができません

Related 関連記事

  1. 1

    未定義のプロパティ 'params'を読み取ることができません(React Router 4)

  2. 2

    React-Routerは未定義のプロパティ文字列を読み取ることができません

  3. 3

    未定義のプロパティ「履歴」を読み取ることができません(React Router 5のuseHistoryフック)

  4. 4

    未定義のプロパティ 'params'を読み取れません、React

  5. 5

    React-未定義のプロパティ 'params'を読み取れません

  6. 6

    React Router:未定義のプロパティ 'pathname'を読み取れません

  7. 7

    react-router "未定義のプロパティ 'push'を読み取れません"

  8. 8

    React Router TypeError:未定義のプロパティ 'state'を読み取れません

  9. 9

    React-router: "未定義のプロパティ 'transitionTo'を読み取れません"

  10. 10

    未定義のプロパティ「ディスパッチ」を読み取ることができません。React

  11. 11

    TypeError:Reactを使用して未定義のプロパティを読み取ることができません

  12. 12

    Reactは未定義のプロパティマップを読み取ることができません

  13. 13

    TypeError:reactで未定義のプロパティ 'reduce'を読み取ることができません

  14. 14

    TypeError:react.jsで未定義のプロパティ 'map'を読み取ることができません

  15. 15

    React BootstrapTypeaheadで未定義のプロパティ 'paginationOption'を読み取ることができません

  16. 16

    Reactはif-blockで未定義のプロパティ 'setState'を読み取ることができません

  17. 17

    Reactで未定義のプロパティ 'image_url'を読み取ることができません

  18. 18

    reactで未定義のプロパティ「名前」を読み取ることができません

  19. 19

    TypeError:未定義のReact、Ant選択のプロパティ「値」を読み取ることができません

  20. 20

    未定義のReactフックのプロパティを読み取ることができません

  21. 21

    React js:ErrorTypeError-未定義の配列のプロパティを読み取ることができません

  22. 22

    未定義のreactのプロパティ小道具を読み取ることができません

  23. 23

    React + Fetch + Json。TypeError:未定義のプロパティを読み取ることができません

  24. 24

    React-未定義のプロパティを読み取ることができません

  25. 25

    React-Native ListView:未定義のプロパティを読み取ることができません

  26. 26

    React Native:未定義のプロパティ「長さ」を読み取ることができません

  27. 27

    React admin:未定義のプロパティ 'filter'を読み取ることができません

  28. 28

    React-TypeError:未定義のプロパティを読み取ることができません

  29. 29

    react-data-grid、未定義のプロパティ 'map'を読み取ることができません

ホットタグ

アーカイブ