未捕获的类型错误:无法在 ReactJs 中读取 {Component}.render 处未定义的属性“map”

IT技术 javascript arrays reactjs
2021-05-15 19:39:31

我像这样将我的数组传递给侧边栏组件的props。我想在我的子组件中访问它...

当我保存代码并转到浏览器时...我收到此错误消息 这是一条错误消息

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

import './styles.scss';

import Sidebar from './../../components/sidebar';
import Header from './../../components/header';

export default class Dashboard extends Component {

buildComponent = props => {
    console.log("Props", props.children);

    var items = [
        {
            "link": "facebook.com",
            "title": "Facebook"
        },
        {
            "link": "google.com",
            "title": "Google"
        }
    ]

    return (
        <div>
            <Header />
            <div className="container-fluid">
                <div className="row">
                    <Sidebar name={items} />
                    <div className="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
                        {props.children}
                    </div>
                </div>
            </div>
        </div>
    );
}

render() {
    return this.buildComponent(this.props);
}
}

Dashboard.propTypes = {
children: PropTypes.any
};

并希望在子组件中的props数据..

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




export default class Sidebar extends Component {
constructor() {
    super();

}


render() {
    return (
        <div className="row">
            <div className="col-sm-3 col-md-2 sidebar">
                <ul className="nav nav-sidebar">
                    <li><a href="#">Dashboard</a></li>
                    <li className="fa fa-plus"><Link to="/feed">For Your Approval</Link></li>
                    <li><Link to="/article">Active</Link></li>
                    <li><a href="">{this.props.items.map((title) => <li>{title}</li>)}</a></li>
                    <li><a href="#">Rejected</a></li>
                    <li><a href="#">Send For Approval</a></li>
                    <li><a href="#">Draft</a></li>
                    <li><a href="#">Archied</a></li>

                </ul>
                <ul className="nav nav-sidebar">
                    <li><a href="">Brand Safety</a></li>
                    <li><a href="">Report</a></li>
                </ul>
            </div>
        </div>
    );
}
}

我正在学习教程,但遇到此错误,我是 reactjs 的新手,请帮助....

3个回答

您没有将“项目”props传递给侧边栏。你只是传递名字。你需要做<Sidebar items={items}>

侧边栏组件中的props,您作为name. 所以,这样做:

this.props.name && this.props.name.map(...)

只有当 name props 不是 undefined 时,map 方法才会起作用。并且有必要检查它是否有value。因为在初始渲染时(甚至使用 null 渲染),使用 map 可能会出错。因此,检查它是一个很好的做法。

添加console.log(this.props)到您Sidebar的 render 方法以查看您收到的内容。