0
点赞
收藏
分享

微信扫一扫

react 弟一天,评论demo

郝春妮 2022-05-02 阅读 54

效果

代码

import React from 'react';
import ReactDOM from 'react-dom/client';

class Demo extends React.Component {
     state = {
        list:[],
        input:"",
        textarea:""

    }
    getFooter(){
        if(this.state.list.length===0){
            return (
                <p>暂时未有评论....</p>
            )
        }
        return (
            this.state.list.map((item,index)=><p key={index} style={{background:"pink"}}>{item.name}:{item.contents}</p>)
        )
    }
    handleClick=()=>{
        let name = this.state.input
        let contents = this.state.textarea
        if(name.trim().length===0)return alert("name is null")
        if(contents.trim().length===0)return alert("contents is null")

        let arr = this.state.list
        arr.unshift({name,contents})
        this.setState({
            list:arr,
            input:"",
            textarea:""
        })
    }
    handleChanage=(e)=>{
        // react处理过事件e的兼容,兼容所有,不需要担心
        let v = e.target.value
        let name = e.target.name
        let data = {}
        data[name] = v
        this.setState(data)
    }
    render(){
        return (
            <div style={{border:"solid 1px #ccc",width:"300px"}}>
                <div>
                    <span>评价人:</span>
                    <input type="text" value={this.state.input} onChange={this.handleChanage} name="input" />
                    <button onClick={this.handleClick}>添加评论</button>
                </div>
                <div>
                    <textarea name="textarea" id="" cols="30" rows="10" value={this.state.textarea} onChange={this.handleChanage}></textarea>
                </div>
                <div>
                    <div>{this.getFooter()}</div>
                    
                </div>
            </div>
        )
    }
}
ReactDOM.createRoot(document.getElementById("root")).render(<Demo />)

 注意点

1,组件名字首字母必须大写

2, class 创建的组件必须要有render方法,并且要有返回值

3,如果是函数创建的组件,必须要有return(返回)值 

4,class和函数创建组件的区别在于,函数是静态的,class是动态的,可以驱动ui

5,想要动态的更改值需要用到"setState"方法,里面转一个对象,要改啥就填什么属性

6,jsx中使用函数,需要注意this指定,默认this是undefined,需要自己改,要么给点击函数弄成箭头函数要么使用bind方法,初始化的时候绑定this

7,style注意是一个对象,就是要两个大括号,其它的都是一个括号,并且不需要引号引起来

举报

相关推荐

0 条评论