9. react - 表单
1. 受控组价: 由react的SetState() 来控制表单组件渲染,state是组件渲染的【唯一数据源】
通过一个案例来体验受控组件:
1. select 选中不能使用 selected 使用 value。
2. onChange 事件必须绑定
3. 多个表单组件使用 name 属性来区分。 e.target.name
class FormControl extends React.Component { constructor (props) { super(props) this.state = { inputValue: '', textAreaValue: '', fruit: '' } this.handleChange = this.handleChange.bind(this) this.handleSubmit = this.handleSubmit.bind(this) } handleSubmit (event) { console.log(event) event.preventDefault(); console.log(event.target.stuName.value) console.log(event.target.marker.value) console.log(event.target.fruit.value) console.log(this.state.inputValue) console.log(this.state.textAreaValue) console.log(this.state.fruit) } handleChange (e) { console.log(e.target, "change") if (e.target.name == 'stuName') { this.setState({ inputValue: e.target.value }) } if (e.target.name == 'marker') { this.setState({ textAreaValue: e.target.value }) } if (e.target.name == 'fruit') { this.setState({ fruit: e.target.value }) } } render() { return ( <form onSubmit={this.handleSubmit}> 名称: <input type="text" name="stuName" value={this.state.inputValue} onChange={this.handleChange}></input><br /><br /> 备注: <textarea name="marker" value={this.state.textAreaValue} onChange={this.handleChange}></textarea><br /><br /> 喜欢的水果: <select name="fruit" value={this.state.fruit} onChange={this.handleChange}> <option value="grapefruit">葡萄柚</option> <option value="lime">酸橙</option> <option value="coconut">椰子</option> <option value="mango">芒果</option> </select><br /><br /> <input type="submit" value="提交" /> </form> ) } } ReactDOM.render( <FormControl />, document.getElementById('root') )
2. 非受控组件 : 组件的值受用户决定,值存在dom对象节点中。
1. this.fileInput = React.createRef() 和 <input type="file" ref={this.fileInput} /> 绑定元素
2. this.fileInput.current 获取元素
class FileInput extends React.Component { constructor(props) { super(props); this.handleSubmit = this.handleSubmit.bind(this); this.fileInput = React.createRef(); } handleSubmit(event) { event.preventDefault(); alert( `Selected file - ${this.fileInput.current.files[0].name}` ); } render() { return ( <form onSubmit={this.handleSubmit}> <label> Upload file: <input type="file" ref={this.fileInput} /> </label> <br /> <button type="submit">Submit</button> </form> ); } } ReactDOM.render( <FileInput />, document.getElementById('root') );
分类:
react
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)