【发布时间】:2018-10-10 22:42:32
【问题描述】:
在我的反应应用程序中,我将我的数据作为道具从父母传递给孩子。在我的子组件中,我可以看到 props 中的数据,但是当我尝试访问数据时,我收到一条错误消息,提示“无法读取未定义的属性”。
我已经编写了如下所示的子组件-
子组件-
import React from 'react';
import ReactDOM from 'react-dom';
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';
const ChildAccordion = (props) => {
console.log(props);
return (
<Accordion>
<AccordionItem>
<AccordionItemTitle>
<h3> Details:
{ props?
props.map(d =>{
return <span>{d.key}</span>
})
:
""
}
</h3>
<div>With a bit of description</div>
</AccordionItemTitle>
<AccordionItemBody>
<p>Body content</p>
</AccordionItemBody>
</AccordionItem>
</Accordion>
)
};
export default ChildAccordion
父组件-
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) {
let Data = this.props.dataProp.map(d =>{
console.log(d);
})
}
}
render(){
const { dataProp } = this.props;
return (
// RENDER THE COMPONENT
<Accordion>
<AccordionItem>
<AccordionItemTitle>
<h3>Policy Owner Details:
{ dataProp?
dataProp.map(d =>{
return <span>{d.key1}</span>
})
:
""
}
</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)
我在内部使用 map 函数,因为我的 api 响应可以是多个对象的数组。
【问题讨论】:
-
console.log()不可靠。它将显示更新的值。尝试使用:console.log(JSON.parse(JSON.stringify(props)))。我相信您会看到props最初可能为 null 或其他内容。在代码中的某处抛出if就可以了 -
我试过了,得到 TypeError: Cannot read property 'props' of undefined.
-
props.map- 请记住 props 是一个对象而不是数组。 -
你不能映射你的道具,因为它是对象,用 prop.yourlist.map 修复它
-
@jonathangoodman 我的道具有一个对象数组,这是我的 api 响应。
标签: javascript reactjs