一个组件正在将类型复选框的不受控制的输入更改为在 React JS 中受控
A component is changing an uncontrolled input of type checkbox to be controlled in React JS
警告:组件正在将复选框类型的不受控制输入更改为受控制。输入元素不应从不受控制切换到受控(反之亦然)。在组件的生命周期内决定使用受控或非受控输入元素。
我的代码:
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)}
/>
这意味着 this.props.selecteds[petitionId] 有时未定义。你可以做的一件事就是像这样给复选框一个默认值。
<Checkbox
value={this.props.selecteds[petitionId] || false}
onChange={() => handleSelect(petitionId)}
/>
警告注意:不要使用 defaultValue 属性,因为它会使您的组件不受定义的控制。
警告:组件正在将复选框类型的不受控制输入更改为受控制。输入元素不应从不受控制切换到受控(反之亦然)。在组件的生命周期内决定使用受控或非受控输入元素。
我的代码:
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)}
/>
这意味着 this.props.selecteds[petitionId] 有时未定义。你可以做的一件事就是像这样给复选框一个默认值。
<Checkbox
value={this.props.selecteds[petitionId] || false}
onChange={() => handleSelect(petitionId)}
/>
警告注意:不要使用 defaultValue 属性,因为它会使您的组件不受定义的控制。