javascript - map 功能错误: Cannot read property 'map' of undefined in Reactjs

标签 javascript arrays reactjs react-router

import React, {Component} from 'react';
import PropTypes from 'prop-types';
import endoskopi from '../Images/endoskopi.jpg';
import '../Css/diagnosis.css'
import {Route,Switch,BrowserRouter,Link} from 'react-router-dom'
import ChosenDiagnosis from "./ChosenDiagnosis";
import App from "./App";


class Diagnosis extends Component {
  constructor(props) {
    super(props);
}


static propTypes = {
    diagnosis: PropTypes.array
};


render() {
    return (
        <BrowserRouter>
            <div>
                <Switch>
                    <Route path='/diagnosis' component={App}/>
                    <Route path='/diagnosis/:id' component={ChosenDiagnosis}/>
                </Switch>

                <div className="row">
                    {( this.props.diagnosis || [] ).map(diagnosis =>{
                        return (<div key={diagnosis.id} className="col-md-4" style={{marginTop:"2rem"}}>
                            <div className="diagnosis-box">
                                <img className="diagnosis-img" src={endoskopi} alt={diagnosis.name}/>
                                <div className="diagnosis-text">{diagnosis.name}</div>
                                <Link to={`/diagnosis/${diagnosis.id}`}>
                                    <button className={"diagnosis-button"}>Ücreti Sorgula</button>
                                </Link>
                            </div>
                        </div>)
                    })}
                </div>
            </div>
        </BrowserRouter>

    );
  }
}

export default Diagnosis;

您好,我是 Reactjs 的新手。我收到此错误,但我不明白原因,因为我的 'diagnosis' 数组已在 app.js 中声明。另外,我将“Switch” block 放在所有代码下,但它不起作用。你能帮我一下吗?

提前谢谢您。

class App extends Component {
constructor(props) {
    super(props);
}

state={
  diagnosis: [
      {
          name: "EKG",
          id: 1
      },
      {
          name: "Ultrason",
          id: 2
      },
      {
          name: "MR",
          id: 3
      },
      {
          name: "Röntgen",
          id: 4
      },
      {
          name: "EEG",
          id: 5
      },
      {
          name: "EMG",
          id: 6
      },
      {
          name: "Kan Testi",
          id: 7
      },
      {
          name: "İdrar Testi",
          id: 8
      },
      {
          name: "Tomografi",
          id: 9
      },
      {
          name: "Endoskopi",
          id: 10
      },
  ]
};


render() {
return (
  <div className="App">
    <Navbar/>
    <Diagnosis diagnosis={this.state.diagnosis}/>
  </div>
);

} }

export default App;

这也是我的另一个组件,App.js。 (应要求编辑)

最佳答案

有了这些静态数据,您的代码应该可以实际工作。您不必在这里使用任何条件渲染。但是您问题中的错误表明,当您的组件第一次渲染时,当时没有任何 diagnosis Prop 。我们应该检查一下。

另一个问题在于您的路线定义。也许您想做类似的事情:

<Switch>
    <Route path='/diagnosis' component={Diagnosis}/>
    <Route path='/diagnosis/:id' component={ChosenDiagnosis}/>
</Switch>

看这部分:path='/diagnosis/:id'

为了保证让我们在您的代码中尝试使用上面的修复:

{( this.props.diagnosis || [] ).map(diagnosis => { ....

关于javascript - map 功能错误: Cannot read property 'map' of undefined in Reactjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52141607/

相关文章:

javascript - 在 Firefox 中,在 keydown 事件处理程序中更改焦点会自动单击已聚焦的内容。我该如何防止这种情况?

javascript - onmouseover 影响取消 span 标签中的换行符

javascript - 如何每小时自动运行CasperJS脚本?

javascript - 当数组有一个值(即使它是空字符串)时处理条件逻辑?

javascript - 如何将 props 传递给 React 组件中的状态

javascript - Iframe 中的 "Back to Top",跨浏览器兼容性

javascript - 多维数组函数在 JS 中不起作用

javascript - 获取以数字开头的键的值

reactjs - useEffect 模拟 componentWillUnmount 不返回更新状态

javascript - React JS autoComplete ="off "不起作用 ---Chrome