React中的元素与组件
const div = React.createElement('div',...) //React元素
const Div = ()=> React.createElement('div',...) //React组件,注意大小写
组件能与其他物件组合起来,极端的说,一个返回React元素的函数就是React组件。
React的两种组件
函数组件
function Welcome(props){
return (<h1>hello,{props.name}</h1>)
}
//使用方法:<Welcome name="XXX" />
//props为外部传来的数据
类组件
class Welcome extends React.Component{
render(){
return (<h1>hello,{this.props.name}</h1>)
}
}
//使用方法:<Welcome name="XXX" />
//类组件在标签内直接传<div message="xxx" />,引用时{this.props.message}
组件逻辑
在React中
会被翻译成React.createElement(‘div’),同理,会被翻译为React.createElement(‘Welcome’)
React.createElement的逻辑:
React.createElement的逻辑:
- 当传入字符串’div’时,则创建一个div
- 当传入一个函数,则会调用这个函数,获得其返回值
- 当传入一个类,会在类前加new(获得实例,执行constructor),获取一个组件对象的render方法,获取其返回值
state和setState
React用state来读,setState来写。因为React推荐数据不可变,setState也不是修改state而是船舰一个新的对象用来存储修改过的state。
类组件使用this.state,this.setState,函数组件使用useState。
在类组件中使用setState时,推荐使用函数的写法。
setState会异步更新UI。
函数组件内部没有this,一律使用参数和变量。
类组件中的state有多个:使用setState修改其中一个变量,那么其他变量会沿用上一次的值,而不是被覆盖。需要注意的是setState只会自动合并第一层,不会合并第二层属性。
函数组件的setState不会自动合并,当有多个变量时可以使用setState({...state,xxx})
的写法(或Object.assign()
)来防止其他属性被覆盖。事件绑定
```jsx //类组件事件绑定
//类组件的简单写法 addN=()=>{…} //addN为一个箭头函数
```