在我的React应用程序中,我有一个对象数组,这些对象是通过api响应获得的。我想在手风琴中显示每个对象的细节。我正在使用可访问React的手风琴,并创建了一个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
有人可以让我知道我要去哪里了吗?预先感谢。
答案 0 :(得分:1)
我认为您遗漏了两件事-首先,您的getMappedData
方法没有大括号。其次,if条件需要返回一个值:
getMappedData = (dataProp) =>{
if (dataProp) {
return dataProp.map(item =>{
return item;
})
}
else {
return "";
}
}
另外,方法调用应该是this.getMappedData
而不是this.props.getMappedData
,因为该方法是在类上定义的,而不是从props传入的
另一个问题是,您不能只从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 "";
}
}
答案 1 :(得分:0)
将您的通话this.props.getMappedData(item[name])
更新为this.getMappedData(item[name])
找不到道具的原因通常用于将数据从父级传递到子级。这篇博客文章在解释它方面做得很好。 https://medium.com/@ruthmpardee/passing-data-between-react-components-103ad82ebd17
答案 2 :(得分:0)
要回答您的第一个问题: 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>
}