reactjs - ReactJS:条件渲染在handleSubmit函数之前提交表单数据
问题描述
我有一个表单,完成后会呈现一个带有表单数据的按钮。该表单有两个输入:1. 标题(按钮中呈现的文本)和 2.) 按钮的 URL。
如果我粘贴在 URL 中,该表单将与条件语句一起使用。但是,如果我开始手动输入 URL,它会根据我输入的第一个字符生成按钮,因为字符串不再为空。
export default class URLButton extends Component {
constructor(props) {
super(props)
this.state = {
links: [],
url: '',
title: ''
}
}
// onChange
onChange = (e) => {
e.preventDefault(e)
this.setState({
[e.target.name]: e.target.value
})
}
// onSubmit
onSubmit = e => {
e.preventDefault()
}
render() {
if (this.state.url === "") {
return (
<>
<form onClick={this.onSubmit}>
<input
name="title"
type="text"
placeholder="add button text"
onChange={e => this.setState({ title: e.target.value })}
/>
<input
name="url"
type="url"
placeholder="your-link.com"
onChange={e => this.setState({ url: e.target.value })}
/>
<br />
</form>
<button type="submit">Submit</button>
</>
)
} else {
return (
<>
<div>
<a href={this.state.url} className="link-button" target="_blank" rel="noopener noreferrer">{this.state.title}</a>
</div >
</>
)
}
}
}
由于 onChange 和 onSubmit 函数有效,我已将其范围缩小到if (this.state.url === "") {...
我尝试将其设置为的条件语句null
,而false
不是空字符串,但如果我尝试这些语句,则表单不会呈现。
解决方案
是的,你是对的,你的问题是,当你输入一些东西时,url
状态不再为空,你必须验证它url
是否有效才能提交表单,我已经用解决方案做了一个StackBlitz的问题,我希望这会有所帮助。
推荐阅读
- python - 使用 Python 将漂亮的汤刮到 MySQL。坚持 if string contains do else do something else
- python - 使用 smtplib 和 python 发送电子邮件时设置发件人姓名
- python - 如何在带有数据框的字典中使用 if/else?
- python - Django - 帖子列表未出现
- wicket - 提交表单时,页面刷新,检票口中的 PageParameters 为空
- gradle - 无法使用 intellij 下载 build.gradle.kts 文件中的依赖项
- javascript - NodeJs 对每个返回的 MySql 结果对象执行操作
- windows - Windows 上的编译器错误 gtk+3 未定义引用
- flutter - Flutter 容器中的动态数据
- c++ - 如何从文件中传递二维拼图