- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
事实上,我正在使用一个对象来存储我的表单收集的所有数据。在这个对象中,我有一个数组,我发现更新它的唯一解决方案是创建一个函数,将每个输入添加到一个数组中,然后设置:this.setState({ 'invites': array } );
但是,问题是每次更改都会添加到数组并存储。我该如何解决这个问题?
<input
className="form-input"
type="email"
placeholder="nom@exemple.com"
name="invites"
onChange={e => addToArray(e, "invites")}
required
/>
function addToArray(e, name) {
emailList.push(e.target.value);
props.handleChangeArray(name, emailList);
}
handleChangeArray = (name, array) => {
this.setState({ [name]: array });
};
最佳答案
编辑:
在下面的 StackSnippet 中,我更新了您的示例 ( OPs example can be found here ),展示了如何在提交时获取值:
const { useState } = React;
const WORD_LIST = ["Foo", "Bar", "Baz", "Rock", "Paper", "Scissors", "Hello", "Goodbye"];
function InviteInput(props) {
const { value, onChange } = props;
const handleChange = e => {
onChange && onChange(e);
};
return (
<li>
<input
value={value}
onChange={handleChange}
className="form-input"
type="email"
placeholder="nom@exemple.com"
name="invites"
required
/>
</li>
);
}
function AddInviteButton(props) {
return (
<button onClick={props.onClick}>
Ajouter une autre personne // (Add another person)
</button>
);
}
function InviteForm({ onSubmit, initialInputCount }) {
const [nbInvites, setNbInvites] = useState(
[...Array(initialInputCount).keys()].map(i=>WORD_LIST[i])
);
const onAddInviteClick = () => {
//let id = nbInvites.length + 1;
setNbInvites([
...nbInvites,
//{
//id,
//***********************************************************
// THIS IS WHERE YOU SET THE DEFAULT VALUE FOR NEW INPUTS
//***********************************************************
/*value:*/ WORD_LIST[Math.floor(Math.random() * WORD_LIST.length)]
//***********************************************************
//}
]);
};
const handleChange = (event, index) => {
let newstate = [...nbInvites];
newstate[index]/*.value*/ = event.target.value;
setNbInvites(newstate);
};
const handleSubmit = event => {
onSubmit(event, nbInvites);
};
return (
<div>
{nbInvites.map((item, index) => {
return (
<InviteInput
key={index}
value={item}
onChange={e => handleChange(e, index)}
/>
);
})}
<AddInviteButton onClick={onAddInviteClick} />
<br />
<button onClick={handleSubmit}>Soumettre // Submit</button>
</div>
);
}
function App() {
const [formVals, setFormVals] = useState();
const doSubmit = (event, formValues) => {
setFormVals(formValues);
};
return (
<div className="page">
<h2 className="box-title">
Qui sont les eleves de cette classe ? // (Who are the students in this
class?)
</h2>
<p>
Vous pourrez toujours en ajouter par la suite // (You can always add
some later)
</p>
<InviteForm onSubmit={doSubmit} initialInputCount={5} />
{formVals ? <pre>{JSON.stringify(formVals, null, 2)}</pre> : ""}
</div>
);
}
ReactDOM.render(<App />, document.body);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.9.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.6/umd/react-dom.production.min.js"></script>
原始答案:
您需要使用 value
属性并使用 event.target.value
将输入的任何内容赋值。
像这样:
function Test() {
const [inputs, setInputs] = React.useState([{
id: 1,
value: "1 initial"
}, {
id: 2,
value: "2 initial"
}]);
const handleChange = (event, index) => {
let newstate = [...inputs];
newstate[index].value = event.target.value;
setInputs(newstate);
}
const addInput = () => {
let id = inputs.length + 1;
setInputs([...inputs, {
id,
value: `${id} initial`
}])
}
return(
<div>
<button onClick={addInput}>Add Input</button>
{inputs.map((item, index) => {
return <div><input type="text" value={inputs[index].value} onChange={e=>handleChange(e,index)} /></div>
})}
</div>
);
}
ReactDOM.render(<Test />, document.body);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.9.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.6/umd/react-dom.production.min.js"></script>
关于javascript - 输入的每个更改都作为数据单独存储(例如 : "t", "te"、 "tes"、 "test"而不是只有 "test"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57747558/
首先,我想补充一点,我认为这是一个错误。我正在尝试将占位符添加到 jqueryte像here 。 但它根本不使用 $().jqte({placeholder: "myplaceholder"}); 来
当我对输出进行类型转换时,我观察到一个有趣的结果: 这是代码片段: int bitSize = (int)log10(1.0*16)/log10(2.0); //bistsize = 3 it
我正在考虑选择一个 html 编辑器。我试过 jHtmlArea ( thinking 它是 JQueryTE。 无论如何,我也尝试了使用简单的 JQuery TE,只需调用 jqte()。 但是我似
.surveyform-class { background: yellow; margin: 0 25%; width: 50%; border-right: 40px so
我正在尝试一些关于字符串池的性能基准。然而,结果并非预期。 我做了3个静态方法 perform0() 方法...每次创建一个新对象 perform1() 方法 ... 字符串文字“Test” perf
这个问题在这里已经有了答案: adding touch listener for liner layout filled with buttons (2 个答案) 关闭 8 年前。 我有这样的布局。
我有一个客户端向服务器执行非常繁重的请求,服务器成功完成请求,但在成功之前浏览器收到 504 GATEWAY TIMEOUT...我怎样才能让浏览器等待服务器响应? 最佳答案 浏览器将等待多长时间,服
我想在 linux 终端上使用 sed 命令高亮显示 C 程序的函数名称。 我可以使用 tput 为函数名称着色。为此,我提供了以下代码。 (第一行) 如果我使用 printf/echo/命令替换为终
事实上,我正在使用一个对象来存储我的表单收集的所有数据。在这个对象中,我有一个数组,我发现更新它的唯一解决方案是创建一个函数,将每个输入添加到一个数组中,然后设置:this.setState({ 'i
我正在尝试使用 RSpec 和 Capybara 编写测试,但是,我总是收到以下错误: No route matches [GET] "/semead/assets/application-7a2cf
我正在使用 jQuery TE 进行文本格式化。我在文本编辑器中输入一些文本并执行一些操作,例如粗体、斜体、有序列表、文本标题和格式设置。一旦我完成文本格式设置。 我需要点击提交按钮。单击提交按钮后,
当此计数器被另一个计时器事件(stop_future)中断并完成时,我无法清除下面的 count_timer( sleep )。 import asyncio import datetime from
如果文件名由正斜杠组成,如“te/st.pdf” [data writeToFile:@"/Documents/te/st.pdf" atomically:YES encoding:NSUTF8Str
我在一家广播电台工作,所以我制作了该广播电台播放轨道的播放列表,您可以在这里找到它 -> http://www.facebook.com/QmusicNL?sk=app_258630990850514
我是一名优秀的程序员,十分优秀!