【问题标题】:values.map is not a function reactjsvalues.map 不是函数 reactjs
【发布时间】:2020-04-23 17:50:03
【问题描述】:

我正在从数据库中获取详细信息,希望将其显示到表格中,但出于最初的目的,我只想在没有表格和内容的浏览器上显示。我正在获取值。地图不是一个函数,但我可以看到打印的值在控制台中

这里我使用函数组件

export default function SimpleTable() {
const [values, setValues] = useState({});

这里是获取函数

async function handleTable(){
const res = await fetch("http://localhost:4000/productslist")
const data = await res.json()
setValues(data.data)
console.log(data.data)
}

在 useEffect 上调用 fetch 函数

useEffect(()=>{
handleTable()
},[])

将值呈现到浏览器中

return (
<div>

{console.log(values)}
{values.map(v => {
return  <h4 key={v.idaddproducts}>{v.productName}{v.productId}{v.productBrand}</h4>})}
</div>
);
}

这是错误

Uncaught TypeError: values.map is not a function

【问题讨论】:

  • 您将初始值设置为{},而不是将其设置为[]
  • 因为您最初的 values 是一个对象。 Array.map 是一个有效的原型。所以将初始的 values 更改为数组 const [values, setValues] = useState([])

标签: reactjs use-effect


【解决方案1】:

您设置了一个值{} 而不是[]。 更新

const [values, setValues] = useState({});

const [values, setValues] = useState([]);

【讨论】:

  • 仅此更改不起作用..我尝试了几次
  • 这可能是因为 API 响应中的值应该为 null 或未定义。
【解决方案2】:

将你的状态定义为一个数组

const [values, setValues] = useState([]);

代码

{values && values.map(v => {
  return  <h4 key={v.idaddproducts}>
           {v.productName}{v.productId}{v.productBrand} 
          </h4>
  })
 }

【讨论】:

  • 你需要添加 values.length 作为三元检查,因为空数组是真值
  • 工作得很好......你给的改变......谢谢队友
【解决方案3】:

你的值的初始状态是一个空对象

来自

const [values, setValues] = useState({});

更新到

const [values, setValues] = useState([]);

由于 Object 没有名为 .map 的方法

同样在您的代码中,因为它是异步调用,您可以根据状态检查数据是否已加载,您可以添加一个简单的事情是三元检查

{values.length && values.map(v => {
return  <h4 key={v.idaddproducts}>{v.productName}{v.productId}{v.productBrand}</h4>})}
</div>
);

所以一旦数组的长度大于零,它就会执行映射函数

使用示例示例工作 Codesandbox

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2022-11-20
  • 2015-10-29
  • 2021-12-05
  • 2020-04-05
  • 2021-11-02
  • 2020-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多