reactjs - 在 ReactJs 中单击时添加新选项
问题描述
我正在做一个React search
用户可以添加多个过滤器的地方。这个想法是,起初只有一个过滤器(选择和输入字段),如果用户希望添加更多,他可以再添加一行(选择和输入),它也会考虑到这一点。
我无法弄清楚如何添加更多行(选择,输入)以及如何读取它们的数据作为列表大小并且一切都可以改变。
所以我在选择数组中有多个选项:
const options = [
{ label: "foo", value: 1 },
{ label: "bar", value: 2 },
{ label: "bin", value: 3 }
];
现在,如果用户从框中选择第一个值Select
,然后在input
框中键入文本,我将得到他们的值,我可以根据它进行搜索。
const options = [
{ label: "foo", value: 1 },
{ label: "bar", value: 2 },
{ label: "bin", value: 3 }
];
class App extends React.Component {
state = {
selectedOption: null,
textValue: null
};
handleOptionChange = selectedOption => {
this.setState({ selectedOption: selectedOption.value });
};
handleTextChange = event => {
this.setState({ textValue: event.target.value });
};
handleSubmit = () => {
console.log(
"SelectedOption: " +
this.state.selectedOption +
", textValue: " +
this.state.textValue
);
};
addNewRow = () => {
console.log("adding new row of filters");
};
render() {
const { selectedOption } = this.state;
return (
<div>
<div style={{ display: "flex" }}>
<Select
value={selectedOption}
onChange={this.handleOptionChange}
options={options}
/>
<input
type="text"
value={this.state.textValue}
onChange={this.handleTextChange}
/>
</div>
<button onClick={this.addNewRow}>AddNewRow</button>
<button onClick={this.handleSubmit}>Submit</button>
</div>
);
}
}
export default App;
我还为此创建了一个CodeSandBox。
如果用户单击addNewRow
新行,则应该出现新行,并且应该可以选择前一个(搜索、输入)而不选择先前选择的行。
我什至不知道我应该如何处理这个问题。
解决方案
要在单击按钮时添加新的输入行,您需要将新的输入项添加到输入列表中,如下所示:
import React, { Component } from 'react'
import Select from "react-select";
const options = [
{ label: "foo", value: 1 },
{ label: "bar", value: 2 },
{ label: "bin", value: 3 }
];
class App extends Component {
constructor(props) {
super(props);
this.state = { inputGroups: ['input-0'] };
}
handleSubmit = () => {
console.log("form submitted");
};
AddNewRow() {
var newInput = `input-${this.state.inputGroups.length}`;
this.setState(prevState => ({ inputGroups: prevState.inputGroups.concat([newInput]) }));
}
render() {
return (
<div>
<div>
<div>
{this.state.inputGroups.map(input =>
<div key={input} style={{ display: "flex" }}>
<Select
options={options}
/>
<input
type="text"
// value={this.state.textValue}
// onChange={this.handleTextChange}
/>
</div>
)}
</div>
</div>
<button onClick={() => this.AddNewRow()}>AddNewRow</button>
<button onClick={this.handleSubmit()}>Submit</button>
</div>
);
}
}
export default App;
单击“AddNewRow”按钮后,它将为您添加新的输入组。现在您需要将此 inputGroup 包装在“表单”中,以便在单击提交时获取每个 inputGroup 的数据。
我希望它能解决你的问题。
推荐阅读
- html - 单击后如何禁用悬停效果?
- python - python sum() 函数在使用时返回 [TypeError: 'str' object is not callable]
- react-native - 优化 React Native 中 require 的使用
- mysql - 部署的 Node.js Web 服务在本地运行时抛出错误
- javascript - 我在 javascript 中创建了没有 eval() 的计算器。现在我想在那里存储历史(以前的计算)
- php - Typo3 - 访问不同页面上内容元素的图像?
- flutter - 无法从缓存 Flutter 中删除 PDF 文件
- mpi - openmpi 中的 -cpu-set 无法正常工作
- performance - 操作寄存器的正确方法(PUT32 vs GPIO->ODR)
- java - VLCJ 从单个 Java 程序控制多个音频文件