在 React 中获取数据的问题,分配给常量变量
Problem with fetching data in React, Assignment to constant variable
我刚开始学习 React,正在尝试获取一些随机数据。我创建了一个 useState 并有两个值:const [name, setName] = useState([]);
当我尝试做 name : response.json();
我得到一个错误,分配给一个常量变量,我正在按照一个教程做同样的事情。
令人惊讶的是,当我创建一个具有不同名称的常量变量时,它起作用了。我只是无法分配 name = await response.json();
谢谢
import React, { useEffect, useState } from "react";
import { ReactDOM } from "react";
const FetchData = () =>{
const [name, setName] = useState([]);
const fetchNames = async () =>{
const url = `https://randomuser.me/api`;
try {
const response = await fetch(url);
name = await response.json();
console.log(name);
setName(name);
} catch (error) {
console.log(error);
}
}
useEffect(()=>{
fetchNames();
},[])
return(
<div>
</div>
);
}
export default FetchData;
有两件事可能有助于消除这种困惑
任何使用 const
创建的变量将永远保持它声明时的值,所以例如如果我们有 const x = ""
,我们以后不能做任何事情喜欢 x = "something else"
在您分享的片段中 name
是一个“状态变量”。状态变量不应该直接更新,状态更新只能通过 setState 函数发生(即本例中的 setName
)
这是官方文档中谈论它的部分https://reactjs.org/docs/state-and-lifecycle.html#do-not-modify-state-directly , https://reactjs.org/docs/hooks-state.html#updating-state
检查我的示例,据我了解,您想在 try 中使用名称作为变量而不是来自状态的变量,因此您应该添加 const
。我还在您的渲染中映射了响应,您可以看到结果。这里还有 codesandbox 示例 https://codesandbox.io/embed/friendly-ishizaka-57i66u?fontsize=14&hidenavigation=1&theme=dark
import { useEffect, useState } from "react";
import "./styles.css";
export default function App() {
const [name, setName] = useState([]);
const fetchNames = async () => {
const url = `https://randomuser.me/api`;
try {
const response = await fetch(url);
constname = await response.json();
console.log(name);
setName(name?.results);
} catch (error) {
console.log(error);
}
};
useEffect(() => {
fetchNames();
}, []);
return (
<div>
{name.map((el) => (
<>
<p>{el.email}</p>
<p>{el.phone}</p>
</>
))}
</div>
);
}
我刚开始学习 React,正在尝试获取一些随机数据。我创建了一个 useState 并有两个值:const [name, setName] = useState([]);
当我尝试做 name : response.json();
我得到一个错误,分配给一个常量变量,我正在按照一个教程做同样的事情。
令人惊讶的是,当我创建一个具有不同名称的常量变量时,它起作用了。我只是无法分配 name = await response.json();
谢谢
import React, { useEffect, useState } from "react";
import { ReactDOM } from "react";
const FetchData = () =>{
const [name, setName] = useState([]);
const fetchNames = async () =>{
const url = `https://randomuser.me/api`;
try {
const response = await fetch(url);
name = await response.json();
console.log(name);
setName(name);
} catch (error) {
console.log(error);
}
}
useEffect(()=>{
fetchNames();
},[])
return(
<div>
</div>
);
}
export default FetchData;
有两件事可能有助于消除这种困惑
任何使用
const
创建的变量将永远保持它声明时的值,所以例如如果我们有const x = ""
,我们以后不能做任何事情喜欢x = "something else"
在您分享的片段中
name
是一个“状态变量”。状态变量不应该直接更新,状态更新只能通过 setState 函数发生(即本例中的setName
)这是官方文档中谈论它的部分https://reactjs.org/docs/state-and-lifecycle.html#do-not-modify-state-directly , https://reactjs.org/docs/hooks-state.html#updating-state
检查我的示例,据我了解,您想在 try 中使用名称作为变量而不是来自状态的变量,因此您应该添加 const
。我还在您的渲染中映射了响应,您可以看到结果。这里还有 codesandbox 示例 https://codesandbox.io/embed/friendly-ishizaka-57i66u?fontsize=14&hidenavigation=1&theme=dark
import { useEffect, useState } from "react";
import "./styles.css";
export default function App() {
const [name, setName] = useState([]);
const fetchNames = async () => {
const url = `https://randomuser.me/api`;
try {
const response = await fetch(url);
constname = await response.json();
console.log(name);
setName(name?.results);
} catch (error) {
console.log(error);
}
};
useEffect(() => {
fetchNames();
}, []);
return (
<div>
{name.map((el) => (
<>
<p>{el.email}</p>
<p>{el.phone}</p>
</>
))}
</div>
);
}