我在value
变量上得到一个未定义的错误,这是一个状态。当在控制台中记录value
时,它首先从useEffect
中的props.value
中获取值。但是在并发渲染中,它写的是undefined
,所以我猜value
变量在那之后变得未定义。但是当删除value.length
代码时,这个问题就不存在了。那么未定义的错误不会发生,props.value
在文本区域内。但是我需要value.length
代码来确定一些CSS类。因此,我猜测之前的值变量是由props.value
,value.length code runs. But then the state default is set as "" so
值设置。长度'应该返回0,即使它首先运行,对吗?所以我不明白为什么我的状态变量值在两者之间变得未定义。
import React, { useState, useEffect } from "react";
const TextArea = (props) => {
const [value, setValue] = useState("");
useEffect(() => {
window.sessionStorage.setItem(props.name, value);
}, [value, props]);
useEffect(() => {
setValue(props.value);
}, [props.value]);
return (
<div className="input-box input-box--3">
<textarea
required
name={props.name}
type="text"
rows={props.rows}
value={value}
onChange={(event) => setValue(event.target.value)}
className={
console.log(value)
// value.length === 0
// ? "input-box--field input-box--field--3"
// : "input-box--field input-box--field--3 input-box--field--3--not-empty"
}
autoComplete={props.autoComplete}
/>
<span
className={
value.length === 0
? "input-box--placeholder"
: "input-box--placeholder input-box--placeholder--not-empty"
}
>
{props.placeholder}
</span>
</div>
);
};
export default TextArea;
这个值取决于value
prop,所以如果你在这个prop中传递一些东西,它应该工作:
https://codesandbox.io/s/mystifying-cartwright-x6ldj0?file=/src/App.js
但是,您可以通过检查传递的prop是否未定义来使它更加防弹:
setValue(props.value ? props.value : "");