javascript - useState 不重新渲染组件
问题描述
我正在使用 useState 钩子,但在更改状态后,组件不会自行渲染。我不知道我错过了什么。
import React, {useState} from 'react'
import List from '@material-ui/core/List'
import ListTile from "./components/ListTile/ListTile"
import style from './App.module.css'
import InputField from "./components/inputField/InputField";
const App = () => {
const [list, setList] = useState([])
const onFormSubmitHandler = (data) => {
list.push(data)
setList(list)
}
return (
<div className={style.outerDiv}>
<h1 className={style.center}>CLister</h1>
<InputField onSubmit={onFormSubmitHandler}/>
<List component="nav">
{list.map((data, index) =>
<ListTile index={index} body={data}/>
)}
</List>
</div>
);
}
export default App
解决方案
请记住,您的状态不能通过推送来修改,因为修改它的方式是使用方法集
在方法中使用此代码onFormSubmitHandler
const onFormSubmitHandler = (data) => {
setList(list => ([...list, data]))
}
最后请记住,如果您的表单将被提交,您需要将其打破e.prevent.default()
推荐阅读
- continuous-integration - GitLab CI/CD - 为合并请求启用测试管道
- java - 如何使用 RTFEditorKit 读取纯文本文件?
- spring - 带有 CORS 起源站点的 Spring 无法正常工作
- javascript - 在锚部分之前使用 owl-carousel 锚定的滚动错误
- python - 在 Python 中导入登录配置文本文件
- python - 在 django 搜索中没有得到结果
- javascript - 是否可以在 Node.js 中使用 Jimp 为图片添加噪点?
- c - 参数多于预期的函数调用
- here-api - 这里的api:gps坐标附近的停车标志?
- apache-spark - 使用过滤器创建一个新列