首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >物料UI选择组件-组件正在将文本类型的受控输入更改为不受控制

物料UI选择组件-组件正在将文本类型的受控输入更改为不受控制
EN

Stack Overflow用户
提问于 2019-03-30 08:04:24
回答 4查看 55K关注 0票数 58

我试图更改Select的值,然后在控制台中得到以下警告。

index.js:1446警告:组件正在将文本类型的受控输入更改为不受控制。输入元素不应从受控切换到不受控制(反之亦然)。决定在组件的生存期内使用受控输入元素还是不受控制的输入元素。

但是我只是以正确的方式更新状态,这是我的代码

代码语言:javascript
复制
 <Select
        value={props.selectedService}
        onChange={props.handleSelectChange}
        inputProps={{
          name: 'selectedService',            
        }}
   >
   <MenuItem value="">
     <em>None</em>
   </MenuItem>
   <MenuItem value="Dry Cleaning">Dry Cleaning</MenuItem>
   <MenuItem value="Washing and Ironing">Washing and Ironing</MenuItem>
   <MenuItem value="Rolling">Rolling</MenuItem>
 </Select>

而换手功能就在这里。

代码语言:javascript
复制
handleSelectChange = ({target: {name,value}}) => { 
  console.log(name);
  console.log(value); 
  this.setState({ 
    serviceRequest: { 
      selectedService: value 
    } 
  }); 
}

状态对象声明如下

代码语言:javascript
复制
state = {
    open: false,
    selectedDate: new Date(),
    selectedTime : new Date(),
    mailDetails :{
      name:"",
      email:'',
      message:''
    },
    serviceRequest: {
      name: '',
      email: '',
      mobileNumber:'',
      address:'',
      landMark:'',
      selectedService:''
  }
};

有谁能建议一下有什么问题吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-05-20 01:19:57

在我的情况下,我必须在Controller组件上设置一个默认值

代码语言:javascript
复制
<Controller
  name="stackoverflow"
  rules={{ required: 'Please select a stackoverflow' }}
  control={control}
  defaultValue={''} // <---------- HERE
  render={({ field, fieldState }) => {
    return (
      <FormControl>
        <InputLabel id="stackoverflow-label">stackoverflow</InputLabel>
        <Select
          id="stackoverflow-select"
          label="stackoverflow"
          labelId="stackoverflow-id"
          error={!!fieldState.error}
          {...field}
        >
         <MenuItem value={i ?? ''} key={i}>
                {i}
         </MenuItem>
        </Select>
        {fieldState.error ? (
          <FormHelperText error>
            {fieldState.error?.message}
          </FormHelperText>
        ) : null}
      </FormControl>
    );
  }}
/>
票数 3
EN

Stack Overflow用户

发布于 2019-03-30 09:16:00

这里不受控制意味着您可能会将Select的值设置为undefined,这是因为这里的value={props.selectedValue}。在这种情况下,道具或selectedValue可能为空,因此它是其中一个不受控制的组件。

要解决警告,可以添加条件以检查null并设置默认值。

value={props.selectedValue ? props.selectedValue : " "}

或者使用空合并运算符(??)来简化语法。

value={props.selectedValue ?? " "}

票数 98
EN

Stack Overflow用户

发布于 2020-10-13 02:14:04

相同的接受答案,但检查未定义,并提供默认值为空合并运算符(?)

代码语言:javascript
复制
value={props.selectedValue ?? ""}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55429442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档