ReactJS - 如何从 material-ui 设置文本字段的值?

ReactJS - How can I set a value for textfield from material-ui?

我有一个 selectField,我想为其设置一个值。假设我在上面打字,当我点击一个按钮时,该按钮将调用一个函数来重置文本字段的值?

<TextField hintText="Enter Name" floatingLabelText="Client Name" autoWidth={1} ref='name'/>

你可以这样做

export default class MyCustomeField extends React.Component {

      constructor(props) {
        super(props);

        this.state = {
          value: 'Enter text',
        };
      }

      handleChange = (event) => {
        this.setState({
          value: event.target.value,
        });
      };

     handleClick = () => {
        this.setState({
          value:'',
        });
      };

      render() {
        return (
          <div>
            <TextField
              value={this.state.value}
              onChange={this.handleChange}
            />
            <button onClick={this.handleClick}>Reset Text</button>
          </div>
        );
      }
    }

有人认为正确的方法是让组件在像那里接受的答案那样的场景中受到控制,但您也可以以这种粗暴的和文化上不可接受的方式控制价值。

<TextField ref='name'/>

this.refs.name.getInputNode().value = 'some value, hooray'

你当然可以像这样检索值

this.refs.name.getValue()

你应该使用 inputRef

而不是 ref
const MyComponent = () => {
  let input;

  return (
    <form
      onSubmit={e => {
        e.preventDefault();
        console.log(input.value);
      }}>
      <TextField
        hintText="Enter Name" 
        floatingLabelText="Client Name" 
        autoWidth={1}
        inputRef={node => {
          input = node;
        }}/>
    </form>
  )
};

我更喜欢这种分配状态变量的方式:

<TextField value={mobileNumber} 
     onChange={e => { this.setState({ mobileNumber: e.target.value }) }}
     className={classes.root}
     fullWidth={true}
     label={t('mobile number')} />

这是一个简短的 React Hook 版本的答案

export default function MyCustomeField({
  initialValue= '', 
  placeholder= 'Enter your text...'
}) {
  const [value, setValue] = React.useState(initialValue)

  return (
    <div>
      <TextField
        placeholder={placeholder}
        value={value}
        onChange={e => setValue(e.target.value)}
      />
      <button onClick={() => setValue(initialValue)}>Reset Text</button>
    </div>
  );
}