node.js - React.js useState() 没有得到任何值;
问题描述
我正在学习 React.js 并且在某个地方遇到了问题。
我正在从 localhost:4000/products 获取数据(即)
这是我的 localhost:4000/products 页面
我正在 node.js 中进行后端查询
这是页面:
const express = require('express');
const app = express();
const cors = require("cors");
const mysql = require("mysql");
app.use(cors());
const selectallquery = "SELECT * FROM users";
const db = mysql.createPool({
host: "localhost",
user: "root",
password: "Sakthi@1234",
database: "reactSql",
});
app.get("/",(req,res)=> {
res.send('Hello Sakthi')
});
app.get("/products/add", (req,res)=> {
const { name } = req.query;
console.log(name);
const insertquery = `INSERT INTO users (name) VALUES ('${name}')`;
db.query(insertquery, (err,result)=> {
if(err){
return res.send(err)
}
else{
return res.send("Successfully added...`")
}
});
});
app.get("/products", (req,res)=> {
db.query(selectallquery, (err,result)=> {
if (err){
return res.send(err)
}
else{
return res.send(result)
}
});
});
app.listen(4000,()=> {
console.log("Running on server 4000")
});
这是我的 React.js 页面:
import React, { useState, useEffect } from 'react'
import axios from "axios";
function Login() {
const [names, setnames] = useState([])
useEffect(()=> {
axios.get("http://localhost:4000/products")
.then(res => {
if (res !== ""){
setnames([...names,res.data.name])
}
})
.catch(err => {
console.log(err)
})
},[])
return (
<div>
{
names
}
</div>
)
}
export default Login
状态名称未设置任何值。它没有显示任何值:
而且我还想知道如何使 useEffect 钩子不在第一次渲染时渲染(componentWillMount),而只在最后渲染(componentDidMount)。
解决方案
首先,您需要更新setnames
,因为res.data
它是一个数组,所以您不能使用res.data.name
:
setnames(res.data)
作为回报,您需要使用map
来显示名称:
{names.map((item) => (
<p key={item.id}>{item.name}</p>
))}
推荐阅读
- sql - 从第一个表中删除不匹配的记录
- autohotkey - 键盘宏按钮重新映射
- mysql - 用奇怪的名字重命名表
- javascript - JS 异步加载 Google Maps API 时出错
- c# - 方法 'IndexOf' 没有重载需要 1 个参数。在 .NET 框架下工作,但不在 .NET Core 下工作
- javascript - 设置正确的正则表达式
- html - Internet Explorer 11 屏幕阅读器辅助功能问题
- java - 在缓冲区阅读器 Java 中添加行计数器
- python - 如何使用新的键和值创建字典并将值添加到一个键
- microsoft-graph-api - 图形邮件 API:504 网关超时错误