【问题标题】:react hooks: input onChange first character can not be deleted反应钩子:输入onChange第一个字符不能删除
【发布时间】:2020-03-21 17:10:39
【问题描述】:

我有一些输入来创建/更新公式,

1) 如果 value={question},一切正常,除了我不能删除最后一个字符(= 输入的第一个字符)

2)如果我不提及值,那一切都很好,除了当我想用雪佛龙图标按钮更改问题顺序时,数据库已经很好地改变了,但输入值仍然显示在最后。

<input
        type="text"
        value={question}
        placeholder="blabla"
        onChange={event => {
          event.preventDefault();
         const value = event.target.value;
         setUpdatedQuestion(value);
        }}
      />

我尝试将 if (event.target.value == "" || event.target.value) 添加到 onChange 但也不起作用

好的,我找到了一些东西,但这是一个 McGyver 提示,不是很干净:在所有新添加问题之前添加一个空格啊啊。但后来我再也看不到我的占位符了:/

仅供参考:问题来自 questions.map,setUpdatedQuestion 更新问题,newOrder 也更新问题


//in QuestionsContent.js (questions is a questions tab)
const QuestionsContent = props => {
return (
    <form onSubmit={onSubmit}>
      {isLoading === false && questions.length > 0
        ? questions.map((question, i) => {
            return (
              <div key={i}>
                <QuestionLine
                  {...question}
                  questions={questions}
                  setQuestions={setQuestions}
                  setNewOrder={setNewOrder}
                />
              </div>
            );
          })
        : null}

        <button 
          onClick={event => {
            event.preventDefault();
            setAddQuestion({
              question: null,
              type: "texte"
            });
          }}
        >
         Add a question
        </button>
</form>
);
};

//in QuestionLine.js:

const QuestionLine = ({
  question,
  setNewOrder,
  setQuestions,
  questions
}) => {
  const [updatedQuestion, setUpdatedQuestion] = useState("");

  // * UPDATE QUESTION *******************************
  useEffect(() => {
    if (updatedQuestion !== "") {
      const tab = [];

      for (let j = 0; j < questions.length; j++) {
        if (j === i) {
          const newObject = {
            question: updatedQuestion,
            type: type
          };
          console.log("adding updatedQuestion ===>", newObject);
          tab.push(newObject);
        } else {
          tab.push(questions[j]);
        }
      }
      setQuestions(tab);
      setUpdatedQuestion("");
    }
  }, [updatedQuestion]);

  return (
    <div >

      {/* QUESTION */}

      <input
        type="text"
        value={question}
        placeholder="blabla"
        onChange={event => {
          event.preventDefault();
         const value = event.target.value;
         setUpdatedQuestion(value);
        }}
      />   
    </div>
  );
};


感谢您的宝贵帮助

【问题讨论】:

  • 您可以删除defaultValue 属性并重试吗?默认值为not needed for controlled components
  • 它不会改变任何东西:/
  • 您能否在问题中发布与您描述的实际行为相似的代码?目前有很多与您的问题无关的内容,而缺少的内容可能与您的问题有关。比如 setUpdatedQuestion 做了什么,问题从何而来?你提到了钩子,但我没有看到 任何 代码是钩子。
  • 好的,现在您的精度更高了,感谢您的支持

标签: javascript reactjs forms input react-hooks


【解决方案1】:

问题可能来自useEffect中的条件:当你想删除字符串的最后一个字符时,updatedQuestion的状态为空,因此条件没有被执行

【讨论】:

  • 你是对的!我永远的感激之情,你救了我:)
猜你喜欢
  • 2021-02-01
  • 2020-11-07
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
相关资源
最近更新 更多