reactjs - 反应:不能用 onChange 改变输入
问题描述
我正在构建此屏幕以加载员工的详细信息/employees/:id.
工作原理:输入正确显示来自employeeDetails
使用 redux 的状态的数据。
什么不起作用:输入不会改变使用onChange={(e) => setName(e.target.value)}
(...orhandleChangeInput
我尝试使用defaultValue
输入,但它们填充的是最后一条记录的数据,而不是当前的。这是另一个问题的材料......
import React, { useEffect, useState } from 'react'
import { useDispatch, useSelector } from 'react-redux'
import {listEmployeeDetails} from '../actions/employeeActions'
const EmployeeDetailsScreen = ({ match }) => {
const [name, setName] = useState(employee.name)
const dispatch = useDispatch()
const employeeDetails = useSelector((state) => state.employeeDetails)
const { employee } = employeeDetails
useEffect(() => {
dispatch(listEmployeeDetails(match.params.id))
}, [dispatch, match])
const handleChangeInput = (e) => {
setName(e.target.value)
}
return (
<div>
<div className="input-group">
<label htmlFor="name">Employee Name</label>
<input type="text" name='name' id='empName' value={employee.name} onChange={handleChangeInput} />
</div>
</div>
)
这是使用的操作,从 postgres 数据库中提取数据:
export const listEmployeeDetails = (id) => async(dispatch) => {
try {
dispatch({ type: EMPLOYEE_DETAIL_REQUEST })
const { data } = await axios.get(`/api/employees/${id}`)
dispatch({
type: EMPLOYEE_DETAIL_SUCCESS,
payload: data.data.employees
})
} catch (error) {
dispatch({
type: EMPLEADO_DETAIL_FAIL,
payload: error.response && error.response.data.message ? error.response.data.message : error.message
})
}
}
这是使用的减速器:
export const employeeDetailsReducer = (state = {employee: {}}, action) => {
switch (action.type) {
case EMPLOYEE_DETAIL_REQUEST:
return { loading: true, employee: {} }
case EMPLOYEE_DETAIL_SUCCESS:
return { loading: false, employee: action.payload }
case EMPLOYEE_DETAIL_FAIL:
return { loading: false, error: action.payload }
default:
return state
}
}
是[name, setName]
不是指的同state
出自employeeDetails
?
解决方案
handleChangeInput
正在改变name
状态,但value
你input
的 指向employee.name
,这是完全不同的。尝试改变value
你input
的name
推荐阅读
- common-lisp - 在 Common Lisp 中,符号名称是否有定义的最大长度?
- c# - C# Magick.Net 从 pdf 到 tiff 的转换是低质量深度 1,如何将深度设置为 2
- google-maps - 有没有办法在不将区域选项传递给脚本标签的情况下让 Google Places 自动完成国家偏见?
- mysql - MySQL SELECT 记录从特定日期不存在
- vue.js - 网站上的某些页面在部署后不会显示
- angular - 如何动态地将值附加到 ion-textarea?
- vba - 如何将发件人的全名添加到文件路径以保存附件?
- ios - 如何在 Bootstrap 中设置 iOS 状态栏背景颜色?
- javascript - 关于部署前端项目的困惑
- maven - Sonatype Nexus: Hide Uploader's IP Address