1 回答

TA贡献1936条经验 获得超6个赞
有几件事,因为那里有一些奇怪的组件/页面。
您没有
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`}}/>
推荐读物:
如果您需要任何一点的详细解释,请告诉我,我会提供。
添加回答
举报