代码之家  ›  专栏  ›  技术社区  ›  techie_questie

如何在React无状态组件中使用es6map函数

  •  2
  • techie_questie  · 技术社区  · 6 年前

    在我的React应用程序中,我有一个通过api响应获得的对象数组。我想在手风琴上显示每个物体的细节。我正在使用react-accessible accordion并创建了一个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
    

    有人能告诉我哪里出了问题吗?提前谢谢。

    3 回复  |  直到 6 年前
        1
  •  4
  •   Abdul Ahmad    6 年前

    我觉得你错过了两件事-首先,你的 getMappedData

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

    另外,方法调用应该是 this.getMappedData this.props.getMappedData 因为方法是在类上定义的,而不是从props传入的

    另一个问题是,不能只从 获取映射数据

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

    假设 item 是字符串或数字。如果它是一个对象或数组,它将无法工作。

    您的渲染方法也可以使用 {this.getMappedData()} 获取映射数据 方法可以使用道具:

    getMappedData() {
          const { dataProp } = this.props;
          if (dataProp) { 
            return dataProp.map(item =>{
                return <div>{item}</div>;
            })
          }
          else {
           return "";
          }
    }
    
        2
  •  2
  •   Pranita    6 年前

    要回答您最初的问题: 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>
            }
    
        3
  •  0
  •   JakeWilson801    6 年前

    this.props.getMappedData(item[name]) this.getMappedData(item[name])

    https://medium.com/@ruthmpardee/passing-data-between-react-components-103ad82ebd17