javascript - 如何在反应前面显示节点数组
问题描述
嗨,伙计们,我尝试显示节点数组,但 map 函数出现错误。就像我设置 apiResponse 时它没有采用 res.json() 的值。
var express = require('express');
var router = express.Router();
router.get('/', function (req, res, next) {
var characters = [
{
"id": 1,
"name": "Mickey",
"username": "Mouse",
"yearCreation": 1928
},
{
"id": 2,
"name": "Donald",
"username": 'Duck',
"yearCreation": 1934
}
];
var characterList = characters.reduce(function (characterList, character) {
characterList.push(character)
return characterList;
}, [])
res.render('map', {
characterList: JSON.stringify(characterList),
});
res.send(characterList);
});
module.exports = router;
在反应方面:
import React, {Fragment, useEffect, useState } from 'react'
import Loader from '../Loader'
import axios from 'axios'
const SearchDisney = () => {
const [inputs, setInputs] = useState('');
const [btn, setBtn] = useState(false);
const [apiResponse, setApiResponse] = useState([]);
const callAPI = () => {
fetch("http://localhost:9000/disneyCharacter")
.then(res => res.json())
.then(res => console.log(res))
.then(res => setApiResponse(res))
}
useEffect(() => {
callAPI();
if (inputs.length > 2) {
setBtn(true)
} else if (btn) {
setBtn(false)
}
}, [inputs, btn])
const handleChange = (event) => {
setInputs(event.target.value);
}
return (
<div className="search-container">
<h1>Personnage Infos</h1>
<form className='search-character-form'>
<input
name ="search"
type="text"
placeholder="Chercher un personnage"
value={inputs}
onChange={handleChange}
/>
{btn ? <button>Confirmer</button> : <button disabled>Confirmer</button> }
</form>
<p style={{color: 'white'}}>
{apiResponse.map(character => (<p>{character.name}</p>))}
</p>
</div>
)
}
export default SearchDisney
但我收到了这个错误:TypeError: Cannot read property 'map' of undefined。我如何使用地图来显示我的数组?为什么说我 apiResponse 未定义?谢谢
解决方案
我认为问题出在console.log
:
const callAPI = () => {
fetch("http://localhost:9000/disneyCharacter")
.then(res => res.json())
.then(res => console.log(res)) // <---- HERE!!
.then(res => setApiResponse(res))
}
console.log
没有返回任何东西,因此 next.then
接收到一个未定义的值。
如果您像这样更新代码:
const callAPI = () => {
fetch("http://localhost:9000/disneyCharacter")
.then(res => res.json())
.then(res => {console.log(res); return Promise.resolve(res); })
.then(res => setApiResponse(res))
}
通过返回res
您的代码应该可以工作,您也可以删除该行,它也应该可以工作。
const callAPI = () => {
fetch("http://localhost:9000/disneyCharacter")
.then(res => res.json())
.then(res => setApiResponse(res))
}
推荐阅读
- go - 带有图像的压缩文件夹返回空文件
- javascript - 是否可以在 javascript 中仅使用模块的子部分?
- android - 可以在 Android 模拟器和插入计算机的钢琴之间测试 MIDI 通信吗?
- ansible - 未定义另一个变量使用的 Ansible 测试
- sql - 为什么这个表达式会导致 SQL 错误?
- key - 翻译键 VTiger
- python - 即使 Anaconda 删除 Path 仍然表明 Anaconda 仍然存在
- angular - D3 饼图仅在一侧渲染一次 *NgFor Angular
- twilio - 获取按属性、类别或标签名称排序的 Twilio 聊天用户频道
- docker - 关于 docker-compose up 时 docker 容器的退出