简体   繁体   English

如何避免在反应中出现此类错误?

[英]How can I avoid this type of error in react?

Hello everybody i'm working on reactjs project here i have an issue if you want to help me thanks for advance i passed my data <StoryMap data={this.state.data} /> to my function so i can push activities and tasks into acts and tasks 'json format' 大家好,我正在忙于reactjs项目,如果您想帮助我,我遇到了一个问题,我<StoryMap data={this.state.data} />我的数据<StoryMap data={this.state.data} />传递给了我的函数,以便我可以进行活动和任务变成行为和任务“ json格式”

function StoryMap(props) {
  var acts = [];
  var taskss = [];

  for (var i = 0; i < props.data.activities.length; i++) {
    acts.push(props.data.activities[i]);
    console.log(acts)
    for (var j = 0; j < props.data.activities[i].tasks.length; j++) {
      taskss.push(props.data.activities[i].tasks[j]);
      console.log(taskss)

    }
  }
  console.log(acts);
  return (
    <table border="1">
      <tr></tr>
    </table>
  );
}

in console output the console.log works fine but there is an error × TypeError: Cannot read property 'length' of undefined 在控制台输出中,console.log可以正常工作,但是有一个错误×TypeError:无法读取未定义的属性“ length”

error 错误

You need to check if props.data.activities is present before using it since this.state.data may initially be empty in your parent component during initial render and you could be populating it only later 您需要在使用前检查props.data.activities是否存在,因为在初始渲染期间this.state.data可能在父组件中最初为空,您只能稍后再填充它。

function StoryMap(props) {
  var acts = [];
  var taskss = [];

  if(props.data.activities) {
    for (var i = 0; i < props.data.activities.length; i++) {
      acts.push(props.data.activities[i]);
      console.log(acts)
      for (var j = 0; j < props.data.activities[i].tasks.length; j++) {
        taskss.push(props.data.activities[i].tasks[j]);
        console.log(taskss)

      }
    }
  }
  console.log(acts);
  return (
    <table border="1">
      <tr></tr>
    </table>
  );
}

Try This code: it works 试试这个代码:它的工作原理

 import React, { Component } from "react";
function StoryMap(props) {
  var acts = [];
  var taskss = [];

  for (var i = 0; i < props.data.activities.length; i++) {
    acts.push(props.data.activities[i]);
    console.log("acts", acts);
    console.log("prop: ", props.data.activities[i].tasks);
    if (props.data.activities[i].tasks) {
      console.log("length :", props.data.activities[i].tasks.length);
      for (var j = 0; j < props.data.activities[i].tasks.length; j++) {
        taskss.push(props.data.activities[i].tasks[j]);
        console.log(" tasks ", taskss);
      }
    }
  }
  console.log(acts);
  return (
    <table border="1">
      <tr />
    </table>
  );
}

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      data: {
        activities: [
          {
            id: "A1",
            label: "Activite 1",
            tasks: [
              {
                id: "A1.T1",
                label: "Activite 1 task 1"
              },
              {
                id: "A1.T2",
                label: "Activite 1 task 1"
              },
              {
                id: "A1.T3",
                label: "Activite 1 task 1"
              }
            ]
          },
          {
            id: "A2",
            label: "Activite 2",
            tasks: [
              {
                id: "A2.T1",
                label: "Activite 1 task 1"
              },
              {
                id: "A2.T2",
                label: "Activite 1 task 1"
              },
              {
                id: "A2.T3",
                label: "Activite 1 task 1"
              }
            ]
          },
          {
            id: "A3",
            label: "Activite 3"
          },
          {
            id: "A4",
            label: "Activite 4"
          }
        ],
        releases: [
          {
            id: "R1",
            storiesByTasks: {
              "A1.T1": [
                {
                  id: "A1.T1.S1"
                },
                {
                  id: "A1.T1.S2"
                }
              ],

              "A1.T2": [
                {
                  id: "A1.T2.S1"
                },
                {
                  id: "A1.T2.S2"
                },
                {
                  id: "A1.T2.S3"
                }
              ]
            }
          },
          {
            id: "R2",
            storiesByTasks: {
              "A1.T2": [
                {
                  id: "A1.T2.S4"
                },
                {
                  id: "A1.T2.S5"
                }
              ],
              "A2.T1": [
                {
                  id: "A2.T1.S8"
                }
              ]
            }
          }
        ]
      }
    };
  }

  render() {
    return (
      <div>
        <StoryMap data={this.state.data} />
        <div className="App" />
      </div>
    );
  }
}

export default App;
this is the code and it contains the data 


import React, {Component} from 'react';
import './App.css';
import Ranger from './header.js';

function StoryMap(props) {
  var acts = [];
  var taskss = [];

  for (var i = 0; i < props.data.activities.length; i++) {
    acts.push(props.data.activities[i]);
    console.log(acts)
    for (var j = 0; j < props.data.activities[i].tasks.length; j++) {
      taskss.push(props.data.activities[i].tasks[j]);
      console.log(taskss)

    }
  }
  console.log(acts);
  return (
    <table border="1">
      <tr></tr>
    </table>
  );
}

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      data: {
        activities: [
          {
            id: 'A1',
            label: 'Activite 1',
            tasks: [
              {
                id: 'A1.T1',
                label: 'Activite 1 task 1'
              }, {
                id: 'A1.T2',
                label: 'Activite 1 task 1'
              }, {
                id: 'A1.T3',
                label: 'Activite 1 task 1'
              }
            ]
          }, {
            id: 'A2',
            label: 'Activite 2',
            tasks: [
              {
                id: 'A2.T1',
                label: 'Activite 1 task 1'
              }, {
                id: 'A2.T2',
                label: 'Activite 1 task 1'
              }, {
                id: 'A2.T3',
                label: 'Activite 1 task 1'
              }
            ]
          }, {
            id: 'A3',
            label: 'Activite 3'
          }, {
            id: 'A4',
            label: 'Activite 4'
          }
        ],
        releases: [
          {
            id: 'R1',
            storiesByTasks: {
              'A1.T1': [
                {
                  id: 'A1.T1.S1'
                }, {
                  id: 'A1.T1.S2'
                }
              ],

              'A1.T2': [
                {
                  id: 'A1.T2.S1'
                }, {
                  id: 'A1.T2.S2'
                }, {
                  id: 'A1.T2.S3'
                }
              ]
            }
          }, {
            id: 'R2',
            storiesByTasks: {
              'A1.T2': [
                {
                  id: 'A1.T2.S4'
                }, {
                  id: 'A1.T2.S5'
                }
              ],
              'A2.T1': [
                {
                  id: 'A2.T1.S8'
                }
              ]
            }
          }
        ]
      }
    };
  }

  render() {
    return (
      <div>
        < StoryMap data={this.state.data}/>
        <div className="App"></div>
      </div>
    );
  }
}

export default App;

try this 尝试这个

App.js App.js

import React, { Component } from 'react';
import StoryMap from './StoryMap';

class App extends Component {
    constructor(props) {
      super(props);
      this.state = {
        data: {
          activities: [
            {
              id: 'A1',
              label: 'Activite 1',
              tasks: [
                {
                  id: 'A1.T1',
                  label: 'Activite 1 task 1'
                }, {
                  id: 'A1.T2',
                  label: 'Activite 1 task 1'
                }, {
                  id: 'A1.T3',
                  label: 'Activite 1 task 1'
                }
              ]
            }, {
              id: 'A2',
              label: 'Activite 2',
              tasks: [
                {
                  id: 'A2.T1',
                  label: 'Activite 1 task 1'
                }, {
                  id: 'A2.T2',
                  label: 'Activite 1 task 1'
                }, {
                  id: 'A2.T3',
                  label: 'Activite 1 task 1'
                }
              ]
            }, {
              id: 'A3',
              label: 'Activite 3'
            }, {
              id: 'A4',
              label: 'Activite 4'
            }
          ],
          releases: [
            {
              id: 'R1',
              storiesByTasks: {
                'A1.T1': [
                  {
                    id: 'A1.T1.S1'
                  }, {
                    id: 'A1.T1.S2'
                  }
                ],

                'A1.T2': [
                  {
                    id: 'A1.T2.S1'
                  }, {
                    id: 'A1.T2.S2'
                  }, {
                    id: 'A1.T2.S3'
                  }
                ]
              }
            }, {
              id: 'R2',
              storiesByTasks: {
                'A1.T2': [
                  {
                    id: 'A1.T2.S4'
                  }, {
                    id: 'A1.T2.S5'
                  }
                ],
                'A2.T1': [
                  {
                    id: 'A2.T1.S8'
                  }
                ]
              }
            }
          ]
        }
      };
    }

    render() {
      return (
        <div>
          <StoryMap data={this.state.data}/>
          <div></div>
        </div>
      );
    }
  }

  export default App;

StoryMap.js StoryMap.js

import React, {Component} from 'react';
import PropTypes from 'prop-types';

class StoryMap extends Component{

    render(){
        const {data} = this.props;
        //console.log("data",data)
        var acts = [];
        var taskss = [];
        //console.log(data);

            for (var i = 0; i < data.activities.length; i++) {
                acts.push(data.activities[i]);
                console.log(acts)

              if(data.activities[i].tasks){
                for (var j = 0; j < data.activities[i].tasks.length; j++) {
                    taskss.push(data.activities[i].tasks[j]);
                    console.log(taskss)
                  }   
              }

            }     

          return (
            <table border="1">
              <tr></tr>
            </table>
          );
    }
}

export default StoryMap;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM