教你五分钟学习一下react基础语法

以下代码全部在react脚手架环境中执行

合成事件的说明

import React from 'react'
import ReactDOM from 'react-dom'
//react事件对象,实际上被react处理过了,
class App extends React.Component{
    state = {
        msg:"我是msg"
    }
    handleClick = (e) => {
        console.log(e)
        console.log(this.state.msg)
    }
    onClick = (e) => {
        e.preventDefault()
        console.log(2222)
    }
    render() {
        return (
            <div>
                <h1>我是App组件</h1>
                <button onClick={this.handleClick}>按钮</button>
                <a href="http://www.baidu.com" onClick = {this.goLink}>去百度</a>
            </div>
        )
    }
}
ReactDOM.render(<App></App>,document.getElementById('root'))
复制代码

setState的使用

import React from 'react'
import ReactDOM from 'react-dom'
//setState作用
//1.修改了state的值
class App extends React.Component{
    state = {
        msg:"我是msg",
        money:100,
        count:10
    }
    handleClick = (e) => {
        // this.state.msg = "嘿嘿"
        this.setState({
          msg:"嘎嘎",
          money:1000
        })
    }
    onClick = (e) => {
        e.preventDefault()
        //阻止冒泡
        console.log(2222)
    }
    add = () => {
        this.setState({
            count:this.state.count + 1
        })
    }
    render() {
        return (
            <div>
                <h1>我是App组件 - {this.state.msg} - {this.state.count}</h1>
                <button onClick={this.handleClick}>按钮</button>
                <button onClick={this.add}>改值</button>
                <a href="http://www.baidu.com" onClick = {this.goLink}>去百度</a>
            </div>
        )
    }
}
ReactDOM.render(<App></App>,document.getElementById('root'))
复制代码

受控组件的说明

//需求:有一个表单元素,希望表单元素的值,可以和state中的数据绑定起来
// 完成的就是之前v-model的效果(语法糖)
import React from 'react'
import ReactDOM from 'react-dom'
class App extends React.Component{
    state = {
        msg:'嘎嘎'
    }
    handleChange =(e) => {
    //  console.log(e.target.value)
    const value = e.target.value
    this.setState({
        msg:value
    })
    }
    render() {
        return (
            <div>
                <h1>受控组件</h1>
                {/* readOnly只读 */}
                <input type="text" 
                value={this.state.msg} 
                onChange={this.handleChange}/>
            </div>
        )
    }
}
ReactDOM.render(<App></App>,document.getElementById('root'))
复制代码

多个受控组件的说明

import React from 'react'
import ReactDOM from 'react-dom'
class App extends React.Component{
    state = {
        username:"张老三",
        desc:"黑色的",
        fruits:3,
        isSingle:false
    }
    handleUser = (e) =>{
     this.setState({
         username:e.target.value
     })
    };
    handeleDesc = (e) => {
        this.setState({
            desc:e.target.value
        })
    };
    handleFruits = (e) => {
        this.setState({
            fruits:e.target.value
        })
    }
    handleSingle = (e)  => {
        // console.log(e.target.value)
        this.setState({
            isSingle:e.target.checked
            
        })
    }
    render() {
        return (
            <div>
                <h1>受控组件</h1>
                {/* 输入框 */}
                <div>
                    <input type="text" value={this.state.username} 
                    onChange={this.handleUser}/>
                </div>
                {/* 文本域 */}
                <div>
                    <textarea value={this.state.desc}
                    onChange={this.handeleDesc} name="" id="" cols="30" rows="10"></textarea>
                </div>
                {/* 下拉菜单 */}
                <div>
                    <select name="" id="" value = {this.state.fruits}
                    onChange={this.handleFruits}>
                        <option value="1">苹果</option>
                        <option value="2">西瓜</option>
                        <option value="3">榴莲</option>
                        <option value="4">芒果</option>
                    </select>
                </div>
                {/*  复选框 */}
                <div>
                    是否单身
                    <input type="checkbox" checked={this.state.isSingle} onChange={this.handleSingle}/>
                </div>
            </div>
        )
    }
}
ReactDOM.render(<App></App>,document.getElementById('root'))
复制代码

多个受控组件处理的优化

import React from 'react'
import ReactDOM from 'react-dom'
class App extends React.Component{
    state = {
        username:"张老三",
        desc:"黑色的",
        fruits:3,
        isSingle:false
    }
    handleChange = (e) => {
    //  console.log("触发了")
    const key = e.target.name
    const value = e.target.value
    const type = e.target.type
    if(type === "checkbox" ) {
        this.setState({
            [key]:e.target.checked,
        })
    } else {
        this.setState({
            [key]:value
        })
    }

    }
    render() {
        return (
            <div>
                <h1>受控组件</h1>
                {/* 输入框 */}
                <div>
                    <input name="username" type="text" value={this.state.username} 
                    onChange={this.handleChange}/>
                </div>
                {/* 文本域 */}
                <div>
                    <textarea name="desc" value={this.state.desc}
                    onChange={this.handleChange}  id="" cols="30" rows="10"></textarea>
                </div>
                {/* 下拉菜单 */}
                <div>
                    <select name="fruits" id="" value = {this.state.fruits}
                    onChange={this.handleChange}>
                        <option value="1">苹果</option>
                        <option value="2">西瓜</option>
                        <option value="3">榴莲</option>
                        <option value="4">芒果</option>
                    </select>
                </div>
                {/*  复选框 */}
                <div>
                    是否单身
                    <input name="isSingle" type="checkbox" checked={this.state.isSingle} onChange={this.handleChange}/>
                </div>
            </div>
        )
    }
}
ReactDOM.render(<App></App>,document.getElementById('root'))
复制代码

属性名表达式

/**const temp = "嘎嘎"
const obj = {
    [temp]:18 *10
}
console.log(obj)*/

const key = "desc"
const obj = {
    username:"嘿嘿",
    age:18,
    [key]:"哈哈"
}
console.log(obj.desc)
复制代码

受控组件的巩固

import React from 'react'
import ReactDOM from 'react-dom'
class App extends React.Component{
    state = {
        username:"张老三",
        desc:"黑色的",
        fruits:3,
        isSingle:false
    }
    handleChange = (e) => {
    const {name,type,value,checked} = e.target
    this.setState({
        [name]: type === "checkbox"? checked:value
    })
    }
    render() {
        return (
            <div>
                <h1>受控组件</h1>
                {/* 输入框 */}
                <div>
                    <input name="username" type="text" value={this.state.username} 
                    onChange={this.handleChange}/>
                </div>
                {/* 文本域 */}
                <div>
                    <textarea name="desc" value={this.state.desc}
                    onChange={this.handleChange}  id="" cols="30" rows="10"></textarea>
                </div>
                {/* 下拉菜单 */}
                <div>
                    <select name="fruits" id="" value = {this.state.fruits}
                    onChange={this.handleChange}>
                        <option value="1">苹果</option>
                        <option value="2">西瓜</option>
                        <option value="3">榴莲</option>
                        <option value="4">芒果</option>
                    </select>
                </div>
                {/*  复选框 */}
                <div>
                    是否单身
                    <input name="isSingle" type="checkbox" checked={this.state.isSingle} onChange={this.handleChange}/>
                </div>
            </div>
        )
    }
}
ReactDOM.render(<App></App>,document.getElementById('root'))
复制代码

非受控组件的演示

import React from 'react'
import ReactDOM from 'react-dom'
class App extends React.Component{
    constructor() {
        super()
        this.inRef = React.createRef()
        this.h1Ref = React.createRef()
    }
    handleClick = () => {
        console.log(this.inRef.current.value)
        console.log(this.h1Ref.current)
        //获取焦点
        this.inRef.current.focus()
    }
    render() {
        return (
            <div>
                <h1 ref={this.h1Ref}>演示非受控组件</h1>
                <input type="text" ref={this.inRef} />
                <button onClick={this.handleClick}>点击</button>
            </div>
        )
    }
}
ReactDOM.render(<App></App>,document.getElementById('root'))
复制代码

ref用来获取react组件

import React from 'react'
import ReactDOM from 'react-dom'
class MyTable extends React.Component{
    render() {
       return <div>我是一个表格</div>
    }
    validate() {
        console.log("对内容进行校验")
    }
    sayHi() {
        console.log("你好哇")
    }
}
class App extends React.Component{
    constructor() {
        super()
        this.inRef = React.createRef()
        this.h1Ref = React.createRef()
        this.tableRef = React.createRef()
    }
    handleClick = () => {
        console.log(this.inRef.current.value)
        console.log(this.h1Ref.current)
        //获取焦点
        this.inRef.current.focus()
        console.log(this.tableRef.current)
    }
    render() {
        return (
            <div>
                <h1 ref={this.h1Ref}>演示非受控组件</h1>
                <input type="text" ref={this.inRef} />
                <button onClick={this.handleClick}>点击</button>
                <MyTable ref={this.tableRef}></MyTable>
            </div>
        )
    }
}
ReactDOM.render(<App></App>,document.getElementById('root'))
复制代码

评论列表-综合案例

import React from 'react'
import ReactDOM from 'react-dom'
import './index.css'

class App extends React.Component {
    state = {
        list:[
            {id:1,name:"渣渣灰",content:"系兄弟,就来砍我"},
            {id:2,name:"古天乐",content:"快来玩,贪玩蓝月"},
            {id:3,name:"刘德华",content:"冰雨"}

        ],
        username:"",
        content:""
    }
    clear = () => {
        this.setState({
            list:[]
        })
    }
    add =() => {
        const {username,content} = this.state
        if(username === "" || content === "") return
        const obj = {
            id: +new Date(),
            name:username,
            content,
        }
        this.setState({
          list:[obj,...this.state.list],
          username:"",
          content:""
        })
    }
    del (id) {
    //   console.log(id)
    /**this.state.list.filter(item => item.id !== id)*/
    this.setState({
        list:this.state.list.filter(item => item.id !== id)
    })
    }
    handleChange =(e) => {
       const {name,value} = e.target
       this.setState({
           [name]:value
       })
    }
    renderList() {
    if(this.state.list.length >0) {
       return <ul>
       {this.state.list.map(item => {
           return <li key ={item.id}>
           <h3>评论人:{item.name}</h3>
           <p>评论内容:{item.content}</p>
           <button onClick={this.del.bind(this,item.id)}>删除</button>
         </li> 
       })}
     </ul>
        } else {
            return  <div className="no-comment">暂无评论</div>
        }
    }
  render() {
    return (
      <div className="app">
        <div>
          <input value={this.state.username} 
          name ="username"
          onChange={this.handleChange} className="user" type="text" placeholder="请输入评论人" />
          <br />
          <textarea
          value={this.state.content}
          onChange={this.handleChange}
          name="content"
            className="content"
            cols="30"
            rows="10"
            placeholder="请输入评论内容"
          />
          <br />
          <button onClick={this.add}>发表评论</button>
          <button onClick = {this.clear}>清空评论</button>
        </div>
        
        {/* <div className="no-comment">暂无评论</div> */}
        {this.renderList()}
      </div>
    )
  }
}

// 渲染组件
ReactDOM.render(<App />, document.getElementById('root'))

复制代码

props传值-类组件

import React from 'react'
import ReactDOM from 'react-dom'
class App extends React.Component{
 render(){
     console.log(this.props)
     return (
        <div>
            <h1>类组件</h1>
            <p>{this.props.name}</p>
            <p>{this.props.age}</p>
        </div>
        
     )
 }
}
const arr = ['张飞','吕布']
ReactDOM.render(<App name="张三" age={18} list={arr} ></App>,document.getElementById('root'))
复制代码

props传值-函数组件

import React from 'react'
import ReactDOM from 'react-dom'
function Demo({name,age,desc}) {
    return (
        <div>
           <h1>我是函数组件</h1>
           <p>{name}</p>
           <p>{age}</p>
           <p>{desc}</p>
        </div>
    )
}
ReactDOM.render(<Demo name="凡凡" age={18} desc="无敌"></Demo>,document.getElementById('root'))
复制代码

props的特点

import React from 'react'
import ReactDOM from 'react-dom'
//props的特点:
//1.可以传递任意类型的  数组,对象,数字,字符串,jsx,函数...
//2.props是只读的,不可以修改的
 
//组件的数据来源
//1.state 是自己的,通过setState可以随便修改
//2.props 是外部的,外部的数据不要改
class App extends React.Component{
    render() {
        console.log(this.props)
        return (
            <div>
                <h1>props的特点</h1>
                {this.props.element}
                <button onClick={this.changeProps}>改props的值</button>
            </div>
        )
    }
    changeProps = () => {
        console.log(this.props.num)
        console.log(this.props.arr)
    }
}
const arr = ["张三","李四"]
const obj = {
    name:"zs"
}
const num = 100
const str= "abc"
const element = <div>我是jsx结构,我是一个元素</div>
const fn =() => {
    console.log('嘎嘎')
}
ReactDOM.render(<App arr={arr} obj ={obj} num={num} element={element} fn={fn} str={str}></App>,document.getElementById('root'))
复制代码

以上代码全部来源视频资料里的敲的代码,仅供学习参考

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享