首页 > 解决方案 > 如何更新在 React 中的 Promise 生成的钩子中设置的值

问题描述

我有一个文本区域,我在其中验证每一行,以帮助我创建一个对象来存储和 id、名称和消息。id 等于您所在的行,消息存储验证消息,名称是输入的文本。

请原谅我,因为我不确定 Promise 是否会影响价值的结果,但我认为这是罪魁祸首。

我在一个验证器函数中有这个函数,它是 useEffect 中的一个 Promise:

const [messagesContainer, setMessagesContainer] = useState([]);
 
useEffect(() => {       

var arrFromVariableTypeNameString = variableTypeName.split('\n');

 function setMessage(data) {
  let allMessages = [...messagesContainer]
  for (let i = 0; i < arrFromVariableTypeNameString.length; i++) {
    let match = allMessages.filter(item => item.id === i + 1);
    if (match?.length) {
      Object.assign(match[0], {
        name: arrFromVariableTypeNameString[i],
        message: data
      })
    } else {
      allMessages.push({
        id: i + 1,
        name: arrFromVariableTypeNameString[i],
        message: data
      })
    }
  }
}

 function validator(variableType) {
  var data = {
    variableType: variableType,
  }

  var rules = {
    variableType: "regex:^[a-zA-Z0-9_ ]+$|min:3|max:20",
  }

  var messages = {
    min: `Enter at least three characters.`,
    max: `Don't exceed more than twenty characters.`,
    regex: `No special characters (but spaces) allowed.`
  }

  validate(data, rules, messages)
    .then(success => {
      console.log('Variable Type Entered correctly.', success)
      setMessage('');
      return
    })
    .catch(error => {
      console.log('error', error[0])
      setMessage(error[0].message);
      return
    });
}

}, [variableTypeName]);

所以踢球者是当下面的 name 属性立即更新时,错误消息没有。它只是级联到每个消息属性?

每条线应该发生什么应该将其验证与其他线分开。

先感谢您!

在此处输入图像描述

标签: reactjsasynchronousreact-hookses6-promiseuse-state

解决方案


推荐阅读