【发布时间】: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