Javascript 无法管理Reactjs上未填写的字段
我正在用reactjs制作一个动态表单。但我有一个恼人的问题。我只想发送填写的表单字段 为此,我使用了这段代码,它允许我下载所有未填充的数据。 在全球范围内,我的发送部分代码为Javascript 无法管理Reactjs上未填写的字段,javascript,reactjs,parameters,axios,Javascript,Reactjs,Parameters,Axios,我正在用reactjs制作一个动态表单。但我有一个恼人的问题。我只想发送填写的表单字段 为此,我使用了这段代码,它允许我下载所有未填充的数据。 在全球范围内,我的发送部分代码为 async handleSubmit(event) { this.setState({ loading: true }); setTimeout(() => { this.setState({ loading: false }); }, 2000); event.preventDefault
async handleSubmit(event) {
this.setState({ loading: true });
setTimeout(() => {
this.setState({ loading: false });
}, 2000);
event.preventDefault();
const {
name_contact='', name_contact1='', endfr='', endfr_1='',
} = this.state;
Object.keys(this.state).forEach(key => {
if (!this.state[key]) delete this.state[key];
})
await axios.post(
' MY_endpoint API',
{
name: `${name_contact},${name_contact_1} `,end: `${endfr},${endfr_1});
}
在这段代码中,我从this.state中删除了空的数据,以删除其中没有任何内容的变量
但我的问题是,我不知道如何处理axios.get中字段为空的事实。
我希望能够从get.axios中删除已被删除的变量
Object.keys(this.state).forEach(key => {
if (!this.state[key]) delete this.state[key];
})
例如,如果我没有填写name_contact_1字段,我希望axios.get为
await axios.post(
' MY_endpoint API',
{
name: `${name_contact}`,end: `${endfr},${endfr_1});
}
或者如果我没有在endfr里放任何东西
await axios.post(
' MY_endpoint API',
{
name: `${name_contact},${name_contact_1} `,end: `${endfr_1});
}
所以我的问题是:有人知道我如何处理这个问题吗?(我的代码结构可能无法实现)
我不确定我是否清楚,但如果我不清楚,告诉我,我会确保我改变它
我的全部代码
export default class FormPage extends Component {
constructor(props) {
super(props);
this.state = initialState;
this.handleSubmit = this.handleSubmit.bind(this);
this.handleChange = this.handleChange.bind(this);
}
showMessage = (bool) => {
setTimeout(() => {
this.setState({
showMessage: true
});
}, 2000);
if (this.state.Showing) return;
this.setState({ Show: true, Showing: true });
setTimeout(() => {
this.setState({ Show: false, Showing: false });
}, 2000);
}
showMessageFalse = (bool) => {
this.setState({
showMessage: false
});
this.setState(initialState);
}
handleChange(event) {
const InputValue = event.target.value;
const stateField = event.target.name;
this.setState({
[stateField]: InputValue,
});
console.log(this.state);
}
async handleSubmit(event) {
this.setState({ loading: true });
setTimeout(() => {
this.setState({ loading: false });
}, 2000);
event.preventDefault();
const {
name_contact='',
} = this.state;
Object.keys(this.state).forEach(key => {
if (!this.state[key]) delete this.state[key];
})
await axios.post(
' MY_endpoint API',
{
name: `${name_contact}`);
}
render() {
const { loading } = this.state;
return (
<div>
<ExpansionPanel title="Contacts" expandedTitle="Contacts" titleIcon="done_all" ><div>
<Container>
<div id="normal"><label id='title2'>Detail du contact</label></div><br/>
<Row align="center">
<Col id= "color" sm={3}> <label> Name: </label></Col> <Col id= "color" sm={3}><Input placeholder="Nom complet" type="string" name="name_contact" value={this.state.name_contact} onChange={this.handleChange}/><br /> </Col>
</Row>
</Container>
</div>
</ExpansionPanel>
<form onSubmit={this.handleSubmit}>
<br /><br /><div id="deb"><Button type="submit" value="Show" onClick={this.showMessageFalse.bind(null, true)} > Update </Button></div>
</form>
</div>
);
}
}
导出默认类FormPage扩展组件{
建造师(道具){
超级(道具);
this.state=初始状态;
this.handleSubmit=this.handleSubmit.bind(this);
this.handleChange=this.handleChange.bind(this);
}
showMessage=(bool)=>{
设置超时(()=>{
这是我的国家({
showMessage:正确
});
}, 2000);
如果(本状态显示)返回;
this.setState({Show:true,Show:true});
设置超时(()=>{
this.setState({Show:false,Show:false});
}, 2000);
}
showMessageFalse=(bool)=>{
这是我的国家({
showMessage:false
});
此.setState(初始状态);
}
手变(活动){
const InputValue=event.target.value;
const stateField=event.target.name;
这是我的国家({
[stateField]:输入值,
});
console.log(this.state);
}
异步handleSubmit(事件){
this.setState({loading:true});
设置超时(()=>{
this.setState({loading:false});
}, 2000);
event.preventDefault();
常数{
姓名\联系方式=“”,
}=本州;
Object.keys(this.state).forEach(key=>{
如果(!this.state[key])删除此.state[key];
})
等待axios.post(
“我的端点API”,
{
姓名:`${name_contact}`);
}
render(){
const{loading}=this.state;
返回(
联系人详细信息
名称:
更新
);
}
}
首先,您需要了解,当您分配值const{name\u contact=''}=this.state;
之后,您将删除此.state['name\u contact']
,就像上面所做的那样,实际上没有更改name\u contact
变量的值。您更改了状态内部的值,但没有更改值本身
其次,javascript无法神奇地为您创建名称
字符串,只有在有2个值时才使用逗号。您必须编写一个函数来实现这一点
类似于var name=[name\u contact,name\u contact1].filter(v=>v).join(',');
函数从数组中去除空值,.join
将其转换为值之间带有逗号的字符串
所以你最终会得到更像这样的结果:
async handleSubmit(event) {
this.setState({ loading: true });
setTimeout(() => {
this.setState({ loading: false });
}, 2000);
event.preventDefault();
const {
name_contact='', name_contact1='', endfr='', endfr_1='',
} = this.state;
const name = [name_contact, name_contact1].filter(v =>v).join(',');
const end = [name_contact, name_contact1].filter(v =>v).join(',');
await axios.post(
' MY_endpoint API',
{
name, end
})
}
首先,您需要了解,当您分配值
const{name\u contact=''}=this.state;
之后,您将删除此.state['name\u contact']
,就像上面所做的那样,实际上没有更改name\u contact
变量的值。您更改了状态内部的值,但没有更改值本身
其次,javascript无法神奇地为您创建名称
字符串,只有在有2个值时才使用逗号。您必须编写一个函数来实现这一点
类似于var name=[name\u contact,name\u contact1].filter(v=>v).join(',');
函数从数组中去除空值,.join
将其转换为值之间带有逗号的字符串
所以你最终会得到更像这样的结果:
async handleSubmit(event) {
this.setState({ loading: true });
setTimeout(() => {
this.setState({ loading: false });
}, 2000);
event.preventDefault();
const {
name_contact='', name_contact1='', endfr='', endfr_1='',
} = this.state;
const name = [name_contact, name_contact1].filter(v =>v).join(',');
const end = [name_contact, name_contact1].filter(v =>v).join(',');
await axios.post(
' MY_endpoint API',
{
name, end
})
}
简单地说,这个方法的问题是,如果我不使用const name=[name\u contact,name\u contact1].filter(v=>v.join(',')中的任何值,axios将不会发送任何内容。例如,如果我没有在输入的name_contact和name_contact1中输入任何内容,则发送将不起作用。但是如果我只在name_contact中输入内容,则工作正常。我不明白问题所在。您在服务器端接受某些值时有问题吗?不是这样,只是,如果我输入与name对应的字段中没有任何内容,它将取消所有axios的发送,而不仅仅是取消name的发送。您是否尝试设置断点以确定在这些条件下
name
变量的值是多少?是否为空?是否引发javascript错误?好的,那么我的lambda日志中的错误是“”errorMessage:“一个或多个参数值无效:AttributeValue可能不包含空字符串”,“我认为这只是Dynamodb的问题。但它发送信息,所以问题不在您的代码中。Thxlittle问题很快,此方法的问题是,如果我在const name=[name\u contact,name\u contact1]。筛选器(v=>v)。加入(“,”),axios将不会发送任何内容。例如,如果我没有在输入的name_contact和name_contact1中输入任何内容,则发送将不起作用。但是如果我只在name_contact中输入内容,则工作正常。我不明白问题所在。您在服务器端接受某些值时有问题吗?不是这样,只是,如果我输入