3

在我的 React 应用程序中,我有一个通过 api 响应获得的对象数组。我想在手风琴中显示每个对象的细节。我正在使用 react-accessible 手风琴并创建了一个 React 无状态组件。我希望我的每个手风琴都代表数组的一个对象。我在 dataProp 中有我的对象数组并迭代我已经编写了我的组件,如下所示 -

import React from 'react';
import ReactDOM from 'react-dom';
import ChildAccordion from './ChildAccordion'
import { setData } from '../actions/action'
import { connect } from 'react-redux'

import {
    Accordion,
    AccordionItem,
    AccordionItemTitle,
    AccordionItemBody,
} from 'react-accessible-accordion';


import 'react-accessible-accordion/dist/fancy-example.css';
import 'react-accessible-accordion/dist/minimal-example.css';


class ParentAccordion extends React.Component {

    componentWillMount() {
      //call to action
      this.props.setData();
  }

  getMappedData = (dataProp) =>{
      if (dataProp) { 
         return dataProp.map(item =>{
            return <div>{dataProp[item]}</div>
        })
      }
      else {
       return "";
      }
}

    render(){
        const { dataProp } = this.props;
        return (
            // RENDER THE COMPONENT
                <Accordion>
        <AccordionItem>
            <AccordionItemTitle>
                <h3>Details: 
               { 
                this.getMappedData(item[name])
               }

                </h3>
            </AccordionItemTitle>
            <AccordionItemBody>
            <ChildAccordion {...dataProp} />
            </AccordionItemBody>
        </AccordionItem>
    </Accordion>
        );
    }
}


const mapStateToProps = state => {
    return {
        dataProp: state.dataProp
    }
};

const mapDispatchToProps = dispatch => ({
  setData(data) {
    dispatch(setData(data));
  }
})
export default connect (mapStateToProps,mapDispatchToProps) (ParentAccordion)

这样做时,这给了我错误-

Uncaught ReferenceError: item is not defined

有人可以让我知道我哪里出错了吗?提前致谢。

4

3 回答 3

4

我认为您缺少两件事-首先,您的getMappedData方法没有右花括号。其次,if条件需要返回一个值:

getMappedData = (dataProp) =>{
      if (dataProp) { 
        return dataProp.map(item =>{
            return item;
        })
      }
      else {
       return "";
      }
}

this.getMappedData另外,方法调用不应该是this.props.getMappedData因为该方法是在类上定义的,而不是来自道具

另一个问题是,你不能只从getMappedData方法中返回一个数组,你需要返回 jsx,所以它可能应该是这样的:

getMappedData = (dataProp) =>{
      if (dataProp) { 
        return dataProp.map(item =>{
            return <div>{item}</div>;
        })
      }
      else {
       return "";
      }
}

假设item是一个字符串或数字。如果它是一个对象或数组,它将不起作用。

你的渲染方法也可以{this.getMappedData()}不需要那里的道具,你的getMappedData方法可以使用道具:

getMappedData() {
      const { dataProp } = this.props;
      if (dataProp) { 
        return dataProp.map(item =>{
            return <div>{item}</div>;
        })
      }
      else {
       return "";
      }
}
于 2018-10-10T17:20:28.250 回答
2

回答您最初的问题: dataProp 数组可以简单地以以下方式呈现:

  render(){
      const { dataProp } = this.props;

      return <Accordion>
            {
              dataProp && dataProp.map(item =>
              <AccordionItem>
                <AccordionItemTitle>
                  <h3>
                    Details: {item.title}
                  </h3>
                </AccordionItemTitle>
                <AccordionItemBody>
                  {item.body}
                </AccordionItemBody>
              </AccordionItem>
            )}
          </Accordion>
        }
于 2018-10-10T17:35:05.727 回答
0

更新您的通话this.props.getMappedData(item[name])this.getMappedData(item[name])

找不到的原因是 props 通常用于将数据从父级传递给子级。这篇博文很好地解释了它。https://medium.com/@ruthmpardee/passing-data-between-react-components-103ad82ebd17

于 2018-10-10T17:20:17.753 回答