Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:无法读取属性';价值';以反应形式表示的空值_Javascript_Reactjs_Typescript - Fatal编程技术网

Javascript TypeError:无法读取属性';价值';以反应形式表示的空值

Javascript TypeError:无法读取属性';价值';以反应形式表示的空值,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我正在开发一个表单,其中我有一个HTML输入,只需要数字或字母。 我的状态界面的简短形式如下: interface State { location: string; startDate: Date; } const handleChangeLocation = useCallback((event: ChangeEvent<HTMLInputElement>): void => { setState(prevState =>

我正在开发一个表单,其中我有一个HTML输入,只需要数字或字母。 我的状态界面的简短形式如下:

interface State {
    location: string;
    startDate: Date;
}
const handleChangeLocation = useCallback((event: ChangeEvent<HTMLInputElement>): void => {
        setState(prevState =>
            update(prevState, {
                location: {$set: event.target.value},
            })
        );
    }, []);
我初始化我的状态如下:

const [state, setState] = useState<State>({
        location: '',
        startDate: new Date(),
    });
const[state,setState]=useState({
位置:“”,
开始日期:新日期(),
});
我的onChangeHandler如下所示:

interface State {
    location: string;
    startDate: Date;
}
const handleChangeLocation = useCallback((event: ChangeEvent<HTMLInputElement>): void => {
        setState(prevState =>
            update(prevState, {
                location: {$set: event.target.value},
            })
        );
    }, []);
const handleChangeLocation=useCallback((事件:ChangeEvent):void=>{
设置状态(prevState=>
更新(prevState{
位置:{$set:event.target.value},
})
);
}, []);
HTML输入如下所示:

<input id="search-grid-location" className="search-grid-element" type="text"
                           placeholder="Location"
                           onChange={handleChangeLocation}/>

当我写的时候,我。E输入中的1没有错误,但当我在第一次输入后写入2时,错误发生。输入字段包含12个字符

错误发生在位置行。见

我调试了应用程序,event.target.value保存了输入值。因此prevState变量可能有错误。我使用功能组件


我使用immutability helper包更新我的状态

在调用
setState
之前,您需要获取
event.target.value
的值。执行
setState
时(尤其是在使用函数setState时),事件将被清除,因此它的target属性将为null

useCallback((event: ChangeEvent<HTMLInputElement>): void => {
  // do this and your error will go away
  const {value} = event.target;
  setState(prevState =>
    update(prevState, {
      location: {$set: value},
    })
  );
}, []);
useCallback((事件:ChangeEvent):void=>{
//这样做,你的错误就会消失
const{value}=event.target;
设置状态(prevState=>
更新(prevState{
位置:{$set:value},
})
);
}, []);

阅读有关

的更多信息是否确定
事件
事件。目标
包含值?错误听起来像
事件。目标
null
Yes值不为null。罗比的解决方案奏效了,而且绝对有道理。仔细检查了event.target.valueI,发现了同样的问题。直接从onChange()调用setState(),它可以处理95%的字段,直到在1个字段上失败为止。我想我和其他人在一起一定很幸运:)