【发布时间】:2019-10-10 14:10:59
【问题描述】:
我正在使用 acios 从 API 获取数据并更新我的钩子的值。初始值设置为空对象。我认为如果我在 axios 请求之前使用“等待”,那么在获取请求并设置新值之前,该函数将不会进行。
不幸的是,这并不总是发生,即使在 axios get-request 应该等待之后,“值”有时仍为空。
如何确保代码中的值 os mever "{}"?我认为“等待”应该解决这个问题,但它没有。
import { Grid, Hidden } from '@material-ui/core';
import Link from '@material-ui/core/Link';
import ProjectInformation from '../../projects/components/ProjectInformation';
import axios from 'axios';
const style = {
textAlign: 'left',
float: 'right',
position: 'fixed',
};
export default function ProjectPage(props) {
const propsId = props.match.params.id;
const [values, setValues] = useState({});
useEffect(() => {
getProjectById();
}, []);
const getProjectById = async () => {
const { data } = await axios.get(`http://localhost:9000/projects/${propsId}`);
setValues(data);
};
console.log('values are', values);
return (
<Grid container spacing={3}>
<Hidden smDown>
<Grid item sm={2}>
<div style={style}>
<Link href="#anchor1">Project Information</Link>
<br />
<Link href="#anchor2">Fieldwork Information</Link>
<br />
<Link href="#anchor3">Personell & Institutions</Link>
<br />
<Link href="#anchor4">Project Updates</Link>
<br />
<Link href="#anchor5">Datasets</Link>
<br />
<Link href="#anchor6">Publications</Link>
</div>
</Grid>
</Hidden>
<Grid item xs={12} sm={10} style={{ borderLeft: '1px solid #dddddd' }}>
<Grid item>
<div id="anchor1">
<ProjectInformation props={values} />
</div>
</Grid>
<Grid item>
<div id="anchor2">
<p>test</p>
</div>
</Grid>
<Grid item>
<div id="anchor3">
<p>test</p>
</div>
</Grid>
<Grid item>
<div id="anchor4">
<p>test</p>
</div>
</Grid>
<Grid item>
<div id="anchor5">
<p>test</p>
</div>
</Grid>
<Grid item>
<div id="anchor6">
<p>test</p>
</div>
</Grid>
</Grid>
</Grid>
);
}
【问题讨论】:
-
这应该会有所帮助:
if(data){ setValues(data); } -
一切看起来都很可靠,你能不能创建一个 jsfiddle 来模拟这个问题?
标签: reactjs axios react-hooks