设置最大从索引中删除 Redux-Form 字段 - 字段验证
Set max removal of Redux-Form field from Index - field validation
https://codesandbox.io/s/zoojymzyp
我上面的示例能够推送和删除字段以更新 json 以发送。该表单预填充了可以覆盖或删除的字段。但是,我希望至少保留 1 个字段 - 例如您不能删除所有字段,必须至少有一个字段 - 此时我可以删除所有字段,直到没有输入。
class renderForm extends React.Component {
render() {
let {
fields,
label
} = this.props;
const removeName = (index) => {
fields = fields.remove(index);
}
return ( <
div >
<
div variant = "fab"
color = "primary"
className = "jr-fab-btn"
aria - label = "add"
onClick = {
() => fields.push()
} >
ADD <
/div>
{
fields.map((newIntel, index) => {
console.log("newIntel", newIntel, index);
return ( <
div >
<
Field name = {
newIntel
}
key = {
index
}
label = {
label
}
placeholder = {
label
}
component = {
renderTextArea
}
/> <
p variant = "fab"
color = "primary"
style = {
{
'cursor': 'pointer'
}
}
className = "jr-fab-btn"
aria - label = "add"
onClick = {
() => removeName(index)
} >
REMOVE <
/p> <
/div>
);
})
} <
/div>
)
}
}
这是一个人为的示例,展示了一种执行此操作的方法。
import React from "react";
import ReactDOM from "react-dom";
class App extends React.Component {
state = {
items: []
};
addItem = () => {
const { items } = this.state;
items.push("item");
this.setState({ items });
};
removeItem = () => {
const { items } = this.state;
if (items.length > 1) {
items.pop("item");
}
this.setState({ items });
};
render() {
return (
<React.Fragment>
<button onClick={this.addItem}>Add</button>
<button onClick={this.removeItem}>Remove</button>
<ul>
{this.state.items.map(i => (
<li>{i}</li>
))}
</ul>
</React.Fragment>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
基本上,如果只剩下一项,您可以修改您的删除功能以不执行任何操作。 CodeSandbox 示例 here.
灵感来自@just-codes 评论中的回答:
const removeName = (index) => {
{fields.length === 1 ? null : fields = fields.remove(index)}
}
这正是我所需要的。谢谢
https://codesandbox.io/s/zoojymzyp
我上面的示例能够推送和删除字段以更新 json 以发送。该表单预填充了可以覆盖或删除的字段。但是,我希望至少保留 1 个字段 - 例如您不能删除所有字段,必须至少有一个字段 - 此时我可以删除所有字段,直到没有输入。
class renderForm extends React.Component {
render() {
let {
fields,
label
} = this.props;
const removeName = (index) => {
fields = fields.remove(index);
}
return ( <
div >
<
div variant = "fab"
color = "primary"
className = "jr-fab-btn"
aria - label = "add"
onClick = {
() => fields.push()
} >
ADD <
/div>
{
fields.map((newIntel, index) => {
console.log("newIntel", newIntel, index);
return ( <
div >
<
Field name = {
newIntel
}
key = {
index
}
label = {
label
}
placeholder = {
label
}
component = {
renderTextArea
}
/> <
p variant = "fab"
color = "primary"
style = {
{
'cursor': 'pointer'
}
}
className = "jr-fab-btn"
aria - label = "add"
onClick = {
() => removeName(index)
} >
REMOVE <
/p> <
/div>
);
})
} <
/div>
)
}
}
这是一个人为的示例,展示了一种执行此操作的方法。
import React from "react";
import ReactDOM from "react-dom";
class App extends React.Component {
state = {
items: []
};
addItem = () => {
const { items } = this.state;
items.push("item");
this.setState({ items });
};
removeItem = () => {
const { items } = this.state;
if (items.length > 1) {
items.pop("item");
}
this.setState({ items });
};
render() {
return (
<React.Fragment>
<button onClick={this.addItem}>Add</button>
<button onClick={this.removeItem}>Remove</button>
<ul>
{this.state.items.map(i => (
<li>{i}</li>
))}
</ul>
</React.Fragment>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
基本上,如果只剩下一项,您可以修改您的删除功能以不执行任何操作。 CodeSandbox 示例 here.
灵感来自@just-codes 评论中的回答:
const removeName = (index) => {
{fields.length === 1 ? null : fields = fields.remove(index)}
}
这正是我所需要的。谢谢