1 回答
TA贡献1936条经验 获得超7个赞
有几件事,因为那里有一些奇怪的组件/页面。
您没有
useEffect在details.js页面中导入错误显示:7:5 错误“useEffect”未定义
您通过
<Link>组件传递的状态需要通过props(或解构props并location直接获取)检索。details.js是一个功能组件,您没有setState(northis) 功能。改用useState钩子。query永远不会向该组件提供参数。一旦你解决了主要问题,你应该通过props.错误“查询”未定义
您的组件不是驼峰式的。
所有错误都应通过以下方式修复:
//import { Link } from "gatsby"
import axios from 'axios';
import React, { useEffect, useState } from 'react';
import Layout from '../components/layout';
const Details = props => {
const [yourState, setYourState] = useState('');
useEffect(() => {
if (props.location.state.someState) {
axios.get(`https://cloud.iexapis.com/stable/stock/${props.location.state.query}/quote?token=*****************`)
.then(res => setYourState(res))
}
}, []);
return <Layout>
<div>
{/*do stuff with your yourState. (i.e: console.log('hi!', yourState))*/}
</div>
</Layout>;
};
export default Details;
关于第二点和第三点:
const Details= props => {}等于const Details= ({ location }) => {}。这种解构为您节省了一步并直接获取location对象,而不是props.location在您的条件下进行。setState功能组件而不是类组件中不允许使用您的函数。这完全取决于您选择一个或另一个,但您需要了解它们的“限制”和“好处”。在这种情况下,您需要使用useState钩子。如您所见,它由const [yourState, setYourState]. 第二个元素 (setYourState) 是用于存储 的值的函数yourState,因此,您的 axios 异步请求将使用setYourState函数存储并通过 检索yourState。当然,您可以随意命名。从您的
index.js,更新状态并设置query:<Link to='/details/' state={{setState: this.state.symbol, query: `yourQuery`}}/>
推荐读物:
如果您需要任何一点的详细解释,请告诉我,我会提供。
添加回答
举报
