[英]Passing Props From Parent To Child After Axios and UseEffect Render
[英]Passing props to UseEffect hook from Parent component
我试图将道具从我的父组件传递给子组件。 以下是重要的片段:
代码段 1:这是包含 prop(整数)的对象。
const cardProps = {
cardProps0: 0,
Snippet 2:这是父组件中的 Card 组件,将 prop 传递给子组件
return (
<MyCardLink source={cardProps.cardProps0} />
代码段 3:这是子组件 (MyCardLink)
useEffect((props) => {
axios
.get(
'http://newsapi.org/v2/everything?q=economy&apiKey=XXXXXXXXXXXXXXXX'
)
.then((res) => {
console.log(res);
setNews(res.data.articles[props.source]);
})
.catch((err) => {
console.log(err);
});
}, []);
目标是 [prop.source] 包含来自 API 提供的数组列表的数字值。 如果我只是在子组件 (MyCardLink) 中放置一个数值来代替 setNews 函数上的 [props.source],那么它呈现组件没有问题。
我的问题是当我将 prop 从父组件传递给子组件并使用 [prop.source] 时,没有任何渲染,我从控制台日志中得到的只是:
无法读取未定义的属性“源”。
难道我做错了什么?
您需要将props
添加到MyCardLink
组件的参数中,而不是将props
传递到您的useEffect
中:
const MyCardLink = (props) => {
// your component's defintion
}
此外,您可以按以下方式解构:
const MyCardLink = (props) => {
const { source } = props
// ... rest
}
然后,您可以在没有props
情况下在useEffect
使用:
useEffect(() => {
axios.get(
'http://newsapi.org/v2/everything?q=economy&apiKey=XXXXXXXXXXXXXXXX'
)
.then((res) => {
console.log(res);
setNews(res.data.articles[source]);
})
.catch((err) => {
console.log(err);
}
);
}, []);
根据您在评论部分的其他问题,我会做的是:
""
更改为null
作为const [news, setNews] = useState(null)
。&&
进行null
检查,并且仅当<Card />
组件在您的return
具有作为news && <Card className={classes.root}>
价值时才呈现它。这背后的原因是您的API响应是异步到达的。
在下面的组件中使用 use props:
const MyCardLink =(props)=>{
...
...
...
}
export default MyCardLink;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.