React基础篇-表单相关

1.受控组件

//使用 state 和 setState 来获取和修改表单元素的value值
calss FormInput extends React.component{
    constructor(props){
        super(props);
        this.state={intValue:"123"};
        this.changeFn=this.changeFn.bind(this);
    }
    changeFn(event){
        this.setState({ intValue:event.target.value })
    }
    render(){
        return (
            <input value={this.state.intValue} onChange={changeFn} />
        )
    }
}
ReactDOM.render(
    <formInput/>,
    document.getElementById("root")
)

2.特殊表单

1、textarea元素:<textarea>会用value属性来代替文本域内容

<form>
    <textarea value={this.state.value} onChange={this.handleChange} />
</form>

2、select元素:根select标签上用value属性来表示选中项

<form>
    <select value={this.state.value} onChange={this.handleChange}>
        <option value="value001">1</option>
        <option value="value002">2</option>
        <option value="value003">3</option>
    </select>
</form>

3.注意事项

1、input-file标签是一个非受控组件,其value是只读并非可修改的;

2、多个同类表单元素,可以通过name属性进行区分;

 

 

 

好的,以下是一关于React Hooks的经验案例的文章。 React Hooks是React 16.8版本中引入的新特性,它允许我们在函数组件中使用state和其他React功能,避免了使用类组件时的繁琐代码和冗余逻辑。在我的开发工作中,我使用React Hooks来提高代码的可读性和可维护性,今天我想分享一些React Hooks的实际应用案例,希望对大家有所帮助。 1. useState Hook useState Hook是React Hooks中最基础的一个,它允许我们在函数组件中使用state。在一个项目中,我使用useState Hook来处理组件的内部状态,例如表单数据、用户输入等等。 例如,我在一个表单组件中使用useState Hook来处理表单数据: ``` import React, { useState } from 'react'; function Form() { const [formData, setFormData] = useState({ name: '', email: '', message: '' }); const handleInputChange = (event) => { const { name, value } = event.target; setFormData({ ...formData, [name]: value }); }; const handleSubmit = (event) => { event.preventDefault(); // 处理表单提交逻辑 }; return ( <form onSubmit={handleSubmit}> <input type="text" name="name" value={formData.name} onChange={handleInputChange} /> <input type="email" name="email" value={formData.email} onChange={handleInputChange} /> <textarea name="message" value={formData.message} onChange={handleInputChange}></textarea> <button type="submit">提交</button> </form> ); } ``` 在这个例子中,我使用useState Hook来定义表单数据的初始值,并使用handleInputChange函数来更新表单数据。使用useState Hook可以使代码更加简洁和易读。 2. useEffect Hook useEffect Hook是React Hooks中另一个重要的特性,它可以在函数组件中处理副作用,例如数据获取、订阅事件等等。在一个项目中,我使用useEffect Hook来处理组件的生命周期,例如组件挂载、更新和卸载等等。 例如,我在一个列表组件中使用useEffect Hook来获取数据: ``` import React, { useState, useEffect } from 'react'; function List() { const [data, setData] = useState([]); useEffect(() => { fetchData(); }, []); const fetchData = async () => { const response = await fetch('https://api.example.com/data'); const result = await response.json(); setData(result); }; return ( <ul> {data.map(item => ( <li key={item.id}>{item.name}</li> ))} </ul> ); } ``` 在这个例子中,我使用useEffect Hook来在组件挂载时获取数据,使用setData函数来更新组件的状态。使用useEffect Hook可以使代码更加清晰和易读。 3. useContext Hook useContext Hook是React Hooks中用于处理全局状态的一个特性,它可以让我们在不使用Redux或其他状态管理库的情况下,在组件之间共享状态。在一个项目中,我使用useContext Hook来实现全局主题。 例如,我在一个主题组件中使用useContext Hook来处理主题状态: ``` import React, { createContext, useContext, useState } from 'react'; const ThemeContext = createContext('light'); function ThemeProvider(props) { const [theme, setTheme] = useState('light'); const toggleTheme = () => { setTheme(theme === 'light' ? 'dark' : 'light'); }; return ( <ThemeContext.Provider value={{ theme, toggleTheme }}> {props.children} </ThemeContext.Provider> ); } function ThemeButton() { const { theme, toggleTheme } = useContext(ThemeContext); return ( <button onClick={toggleTheme} style={{ backgroundColor: theme === 'light' ? '#fff' : '#000', color: theme === 'light' ? '#000' : '#fff' }}> {theme === 'light' ? '开启暗黑模式' : '关闭暗黑模式'} </button> ); } ``` 在这个例子中,我使用useContext Hook来实现全局主题,当用户点击按钮时,可以切换网站的主题。使用useContext Hook可以避免使用Redux等状态管理库的复杂性和冗余代码。 总结 React Hooks是React 16.8版本中引入的新特性,它可以使我们在函数组件中使用state和其他React功能,避免了使用类组件时的繁琐代码和冗余逻辑。在实际项目中,我们可以使用useState Hook、useEffect Hook、useContext Hook等特性来处理组件的内部状态、生命周期和全局状态等等。使用React Hooks可以使代码更加简洁、易读和易于维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值