reactjs - 道具未被识别
问题描述
下面是我从后端获得的声明变量。
function DateTimeFilterComponent(props) {
const { chartPeriod } = props;
const classes = useStyles();
let timeStampData = {};
let dateFrom = '';
let dateTo = '';
if (!isEmpty(chartPeriod) && chartPeriod) {
timeStampData = Object.values(chartPeriod).map(payload => payload);
const [dateOne, dateTwo] = timeStampData[1].timeStamps;
dateFrom = dateOne;
dateTo = dateTwo;
}
return (
<form className={classes.container} noValidate>
<Grid container alignments="flex-end">
<Grid item>
<DateTimeComponent controlName="dateFrom" defaultValue={dateFrom} />
</Grid>
<Grid item>
<DateTimeComponent controlName="dateTo" defaultValue={dateTo} />
</Grid>
</Grid>
</form>
);
}
dateFrom 和 dateTo 返回类型是字符串,即“2021-07-12T00:00”,我分配给我的组件,如下所示:
<DateTimeComponent controlName="dateFrom" defaultValue={dateFrom} />
<DateTimeComponent controlName="dateTo" defaultValue={dateTo} />
但是,在我的 TextField 组件中,当我在我的 useState 上分配 dateFrom 和 dateTo 时,它没有被识别。
function DateTimeComponent(props) {
const { controlName, defaultValue } = props;
const classes = useStyles();
const [getDate, setDate] = React.useState(defaultValue);
const handleChangeDate = e => {
setDate(e.target.value);
};
return (
<TextField
id={controlName}
type="datetime-local"
value={getDate}
className={classes.textField}
size="small"
onChange={handleChangeDate}
InputLabelProps={{
shrink: true,
}}
inputProps={{ className: classes.inputSize }}
/>
);
}
但是当我这样声明值时,useState 识别出字符串值并在文本字段中正确设置。
<DateTimeComponent controlName="dateFrom" defaultValue="2021-07-12T00:00" />
<DateTimeComponent controlName="dateTo" defaultValue="2021-07-12T00:00" />
任何人都可以指出什么是错误的并做出奇怪的行为。
谢谢
解决方案
好的,这意味着第一次渲染您的组件时,例如一个实例defaultValue
是空的(直到您从后端获得实际值)。
所以为了解决这个问题,你需要添加这个
{dateFrom && <DateTimeComponent controlName="dateFrom" defaultValue={dateFrom} />}
{dateTo && <DateTimeComponent controlName="dateTo" defaultValue={dateTo} />}
或者像这样添加useEffect
你的DateTimeComponent
组件
useEffect(() => {
setDate(defaultValue)
}, [ defaultValue ])
推荐阅读
- javascript - 如何在两个单独的父组件中重新使用 Angular 组件(包含表单)以实现不同的自定义类型的使用?
- javascript - 如果span元素值是,如何使用条件?
- python-3.x - 如何解决 Cloud Functions 中子进程的文件权限错误?
- xcode - 当键盘可见/不可见时显示/隐藏 navigationBarItems | SwiftUI
- arrays - PowerCLI、多个阵列、for 循环的初学者问题
- sorting - 回收站视图中的订单列表,Android Studio,Kotlin
- angular - 虚拟卷轴 - 有条件启用
- wordpress - Wordpress 管理员不适用于 AppEngine 子域
- android - 使用带有导航库的嵌套 DialogFragments 时出现 IllegalStateException
- html - 测试用例因错误而失败