javascript - 即使未成功,状态值也会在 onSubmit 后重置

标签 javascript reactjs react-redux

我有一个表单,如果我提交并返回错误,我会对其进行编程以显示错误所在。仅修复错误并提交后,它失败了,因为状态正在重置并且空值被发送到 api。 我将在下面展示一些代码:

const AddProject = (props) => {
  const [values, setValues] = useState({
    projectName: '', projectIdentifier: '', description: '', startDate: '', endDate: '', errors: {},
  });

  useEffect(() => {
    if (props.errors) {
      setValues({ errors: props.errors });
    }
  }, [props.errors]);

  const onChange = (e) => {
    const { name, value } = e.target;
    console.log(values);
    setValues({ ...values, [name]: value });
  };

  const onSubmit = (e) => {
    e.preventDefault();
    const newProject = {
      projectName: values.projectName,
      projectIdentifier: values.projectIdentifier,
      description: values.description,
      startDate: values.startDate,
      endDate: values.endDate,
    };

    props.createProject(newProject);
  };

在下面创建项目操作

const createProject = (project) => async dispatch => {
  try {
    await axios.post('http://localhost:8080/api/project', project);
    window.history.back();
  } catch (e) {
    dispatch({
      type: GET_ERRORS,
      payload: e.response.data
    });
  }
};

export default createProject;

最佳答案

useEffect(() => {
if (props.errors) {
  let temp = { ...values };
  temp.errors = props.errors;
  setValues(temp);
}
}, [props.errors]);

使用react hooks时,需要获取之前的状态,然后设置新的值。当您仅设置 props.errors 时,它会从您的状态中删除所有其他键值。

希望这有帮助

关于javascript - 即使未成功,状态值也会在 onSubmit 后重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58432177/

相关文章:

javascript - Node.js:同步调用相同延迟的 setTimeout 回调?

javascript - VueJS |根据选定的复选框或在输入字段中输入文本来过滤 API 数据

javascript - 点击事件的不同操作

reactjs - Redux 无效的钩子(Hook)调用

javascript - React Navigation 在导航时转到初始路线

javascript - 粘性导航栏在粘性后更改 CSS

javascript - 我如何在两个数组上重复 AngularJs Ionic

javascript - react 错误 : Failed to execute 'insertBefore' on 'Node' : The node before which the new node is to be inserted is not a child of this node

javascript - 过滤与第二个数组中的值匹配的对象数组

javascript - react组件如何传值给上一个页面组件