简体   繁体   English

在 React Js 中设置状态

[英]Set state in React Js

I have an application with 3 inputs: name, percentage, and password.我有一个包含 3 个输入的应用程序:名称、百分比和密码。 Also, I have a save button that should change the state, using the values from the inputs, in the parent component.另外,我有一个保存按钮,它应该使用父组件中输入的值来更改状态。

Using Ant Desing, I want to set the percentage, but I can't get the [e.target.name] from the Input Number from AntD.使用 Ant Desing,我想设置百分比,但我无法从 AntD 的 Input Number 中获取[e.target.name]

How to solve this, and when I click the save button to update the state in parent component?.如何解决这个问题,以及当我单击保存按钮以更新父组件中的状态时?。

code link: https://stackblitz.com/edit/react-ytowzg代码链接: https : //stackblitz.com/edit/react-ytowzg

Some notice points:一些注意点:

  • setState inside handler onInputNumber()处理程序中的 setState onInputNumber()
  • since the component is fully controlled, you don't need defaultValue由于该组件是完全受控的,因此您不需要defaultValue
  • add value={state.percentage} props instead.改为添加value={state.percentage}道具。
  • add percentage inside save()save()添加percentage

Try it online: https://stackblitz.com/edit/react-5qrwcq在线试用: https : //stackblitz.com/edit/react-5qrwcq

const Test = ({ user, setUser }) => {
  const [state, setState] = useState({ name: "", password: "", percentage: "1" });

  function onChange(e) {
    setState({
      ...state,
      [e.target.name]: e.target.value
    });
    console.log(state)

  }
  function onInputNumber(value) {
    setState({...state, percentage: value})
    console.log('changed', value);
  }

  function save() {
    setUser({ ...user, name: state.name, password: state.password, percentage: state.percentage });
  }

  return (
    <div>
      <input name='name' onChange={onChange} />
      <input name='password' onChange={onChange} />
      <InputNumber
      // defaultValue={100}
      min={0}
      max={100}
      value={state.percentage}
      formatter={value => `${value}%`}
      parser={value => value.replace('%', '')}
      onChange={onInputNumber}
    />
      <button onClick={save}>save</button>
    </div>
  );
};

You can pass the name from the onchange of the Antd input.您可以从 Antd 输入的 onchange 传递名称。

 <InputNumber
      defaultValue={100}
      min={0}
      max={100}
      formatter={value => `${value}%`}
      parser={value => value.replace('%', '')}
      onChange={(value) => onInputNumber('myinput', value)}
    />


function onInputNumber(name, value) {
    console.log('changed', value, name);
  }

In your save function, it appears that you haven't coded the update to percentage:在您的保存功能中,您似乎没有将更新编码为百分比:

function save() {
    setUser({ ...user, name: state.name, password: state.password });
  }

Hope this helps.希望这可以帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM