当前位置: 首页 > 知识库问答 >
问题:

组件正在更改要在React JS中控制的复选框类型的非受控输入

空鸿云
2023-03-14

警告:组件正在更改要控制的非受控输入类型复选框。输入元件不应从不受控制切换到受控(反之亦然)。决定在组件的生命周期内使用受控或不受控制的输入元件。

我的代码:

      interface IState {
      isSelectedAll: boolean;
      selected: any;
      confirmDelete: boolean;
      confirmSignStatus: boolean;
      petitionId: any;
      items: any;
      verificationCode: any;
    }
...
    /**
     * Default state.
     */
    function getDefaultState(): IState {
      return {
        isSelectedAll: false,
        selected: {},
        confirmDelete: false,
        confirmSignStatus: false,
        petitionId: '',
        items: [],
        verificationCode: null,
      };
    }

  public handleSelect = (id: number) => {
    let selectedObj = Object.assign({}, this.state.selected);
    selectedObj[id] = !selectedObj[id];
    this.setState({ selected: selectedObj });
  }
...

  public state: IState = getDefaultState();


 public componentWillReceiveProps(nextProps: any): void {
    if (nextProps.ecourtListBranch.data) {
      this.initSelects(nextProps.ecourtListBranch.data);
    }
  }

      private initSelects = (data: any): void => {
        let selectedObj: any = {};
        data.map((item: IPetitionView) => {
          selectedObj[item.petitionId] = false;
          this.setState({ selected: selectedObj });
        });
      }
interface IProps {
  ecourt: IPetitionView;

  ecourtActions: typeof EcourtActions;

  handleSelect: (id: number) => any;

  selecteds: any;

  handleDeletePetition: (petitionId: number) => any;

  handleEditPetition: (petitionId: number) => any;
}

...

<Checkbox
  value={this.props.selecteds[petitionId]}
  onChange={() => handleSelect(petitionId)}
 />

共有1个答案

经正祥
2023-03-14

这意味着this.props.selecteds[pettionId]有时是未定义的。您可以做的一件事是像这样给复选框一个默认值。

<Checkbox
  value={this.props.selecteds[petitionId] || false}
  onChange={() => handleSelect(petitionId)}
 />

警告:不要使用defaultValue属性,因为它会使组件不受定义控制。

 类似资料:
  • 我试图摆脱这个错误信息,但仍然没有成功。 还有Facebook页面的链接,但我仍然不知道该如何找到它。 在输入似乎总是一个非空值,我如何解决这个问题?

  • 问题内容: 警告:组件正在更改要控制的文本类型的不受控制的输入。输入元素不应从不受控制切换为受控制(反之亦然)。确定在组件的使用寿命中使用受控或非受控输入元素。* 以下是我的代码: 问题答案: 原因是,在您定义的状态下: 字段作为空白对象,因此在第一次渲染期间将是,输入字段的值将为: 因此,输入字段将变得不受控制。 在输入中输入任何值后,状态将变为: 那时输入字段被转换为受控组件;这就是为什么您得

  • 我一直有这个错误:一个组件正在将受控输入的类型文本更改为不受控制。输入元件不应从受控切换到不受控(反之亦然)。决定在组件的生命周期内使用受控或不受控制的输入元件。当我尝试将值从数据库输入框点击编辑 这是我的代码:

  • 我得到了这个错误,我是新的反应。我看过其他帖子,但仍然不能解决这个问题。我们将不胜感激。谢谢 警告:组件正在更改要控制的电子邮件类型的未控制输入。输入元素不应该从不受控制切换到受控制(反之亦然)。决定在组件的生存期内使用受控还是不受控的输入元素。更多信息在输入(由编辑创建)中,在div(由编辑创建)中,在div(由编辑创建)中,在窗体(由编辑创建)中,在div(由编辑创建)中

  • 我有一个页面,我从服务器上获取数据,并为受控输入设置状态值。(例如,我有一个值为的输入,我从服务器上获取名称(例如Dave)并将其设置为name,因此输入值为Dave。它可以工作,但我遇到了对象数组的问题。) 所以这就是状态 这就是我如何使用 但这会导致此错误:

  • 我正在对我的组件进行排序 我在选择标记中有一个错误。获取错误props.filters.sortby的值最初是日期。当我试图从下拉列表中更改它时,错误发生了。