javascript - react ,改变状态只适用于一个功能

标签 javascript reactjs

我的 React 应用程序有问题。我有 2 个组件(两个单独的选择器)的表单,我需要在日期不正确时更改组件状态。这是代码:

    constructor(props: EditFormProps) {
    super(props);

    this.state = {
        isValidDate: true,
        isValidTime: true
    } as EditFormState;

    this.validateDate = this.validateDate.bind(this);
    this.validateTime = this.validateTime.bind(this);
}

render() {
       return (
           <div>
                <FormSection title={FLIGHT_DATES} className="flight-dates">
                    <div>
                        <DateRange validateDate={this.validateDate} />
                    </div>
                    <div>
                        <TimeOfDate validateTime={this.validateTime} />
                    </div>
                </FormSection>
            </div>
        );
    }
}


private validateDate(isValidDate: boolean) {
    this.setState({
        ...this.state,
        isValidDate: isValidDate,
    } as EditFormState);
}

private validateTime(isValidTime: boolean) {
    this.setState({
        ...this.state,
        isValidTime: isValidTime,
    } as EditFormState);
}

当我只有一个像 validateDate 这样的函数时,它的 isValidDate 设置状态没有问题,但是当我有 2 个函数(validateDate 和 validateTime)时,我得到了 validateDate 的正确参数,但状态始终相同(它对 isValidTime 工作正常)。当我在 FormSection 中更改位置并且 TimeOfDate 是第一个时,我对 isValidTime 状态和 isValidDate 有同样的问题,它很好。所以我的项目中可能有一些更大的问题,但也许还有其他方法可以设置此状态或从 DateRange 或 TimeOfDay 传递参数?

最佳答案

我认为您的代码的问题在于您正在从 this.setState() 调用中的 this.state 读取数据。

在这种情况下,this.state 不能保证包含最新状态。

您应该将函数而不是对象传递给 this.setState()。例如:

private validateDate(isValidDate: boolean) {
  this.setState((prevState, props) => ({
    ...prevState,
    isValidDate: isValidDate
  })
}

更多信息在 react docs .

关于javascript - react ,改变状态只适用于一个功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47769389/

相关文章:

javascript - 优化我的 javascript REGEX 以格式化短名称

javascript - 为什么 contentDocument 返回 null?

javascript - 当我不处于兼容模式时,JQuery 在 IE 中表现得很奇怪

javascript - Recharts 条形图 - 仅在堆叠条形图中的某些条形上有条件地显示标签

javascript - ReactJS:组件不会在状态更改时重新渲染

javascript - 当页面加载时,JavaScript 如何解析 unicode?

javascript - 如何等到对 Firebase 的请求完成,然后在 ReactJS 中渲染应用程序?

reactjs - 具有功能组件的 Ag-grid 自定义工具提示

javascript - React-Router 查询字符串比状态变量落后一步

javascript - 更改 react 组件内容时按钮会移动位置