React初体验

149 阅读2分钟

React初体验

函数组件

function welcome(props){
return (<div>hello,{props.name}</div>) 
}
//使用方法
<Welcome name = '小红' />

类组件

class welcome extends React.Component
{
    render(){
        return (<div>hello,{this.props.name}</div>)
    }
}
//使用方法
<Welcome name = '小李' />

这里我们简单的说一下上面的<Welcome /> 会被翻译成什么

再React中 <div />会被翻译成React.createElement("div")

<Welcome />会被翻译为React.createElement(Welcome)

这里我们也来说一下React.createElement的逻辑

  • 如果传入字符串 'div',则会创建一个div
  • 如果传入一个函数,则会调用该函数,并且获取其返回值
  • 如果传入一个类,则在这个类的前面添加个new(这里会执行constructor),获取一个组件对象,然后调用对象的render方法,获取其返回值。

小试牛刀

下面我将分别用函数组件和类组件来实现一个加一功能的按钮

函数组件:

import React,{useState} from 'react'
import ReactDOM from 'react-dom'
const root = document.getElementById('root')
const App = () =>{
    const [n,setN] = useState(0)
    const onClick = () =>
    {
        setN(n+1)
    }
    return (	<> 
        <div>{n}</div>
        <button onClick = {onClick}>+1</button></>)
}
ReactDOM.render(<App />,root)

虽然这只是一个简单的加一按钮,但是这里确有着很多值得我们注意的地方

  • 使用useState(0)会返回两个参数,一个是读取数据的Api,一个修改数据的Api,而括号里面的数字则表示初始值;例如

    const [n,setN] = useState(0)
    //n表示读取数据的接口,setN表示修改数据的接口,初始值为0,注意,这里的n和setN是可以随便命名的。
    
    

类组件:

import React from 'react'
import ReactDom from 'react-dom'
const root = document.getElementById('root')

class App extends React.Component {
    constructor(props){
        super()
        this.state = {
            n:0
        }
    }
    onClick = () =>{
        this.setState((state)=>{
            return {n:state.n+1}
        })
    }
    render(){
       return (<> <div>{this.state.n}</div>
           <button onClick = {this.onClick}>+1</button></>)
    }
}
ReactDOM.render(<App />,root)

这样,一个简单的加一按钮就分别用函数组件和类组件实现了,值得注意的是因为在React中没有监听数据得变化因此当数据发生变化时ui并不会更新,所以在类组件中使用 setState 来修改数据,函数组件中使用 useState 来修改数据,setState 和 useState会在修改数据后重新渲染页面,