react基础知识一

react脚手架的使用步骤

index.js:
// 1 导入react
import React from 'react'
import ReactDOM from 'react-dom'

// 2 创建rect元素
const title = React.createElement('h1',null,'Hello React!!!');

// 3 渲染react元素
ReactDOM.render(title,document.getElementById('root'));

在这里插入图片描述

创建rect元素的方法

方法1:使用React.createElement

const title = React.createElement('h1',null,'Hello React!!!');

方法2:使用JSX

  const title = <h1>Hello JSX<span>这是span</span></h1>

在这里插入图片描述

JSX的基本使用

在这里插入图片描述

函数组件

在这里插入图片描述

类组件

在这里插入图片描述

事件绑定

在这里插入图片描述

事件对象

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

JSX的列表渲染

  • 如果要渲染一组数据,应该使用数组的map()方法
  • 注意:渲染列表时应该添加key属性,key属性的值要保证唯一
  • 原则:map()遍历谁,就给谁添加key属性
  • 注意:尽量避免使用索引号作为key
    在这里插入图片描述

JSX的样式处理

  1. 行内样式 - style
  2. 类名 - className(推荐)
    在这里插入图片描述

state的基本使用

在这里插入图片描述

setState()修改状态

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

事件绑定this指向

1.使用class的实例方法(推荐)
2.箭头函数
3.bind
在这里插入图片描述

操作文本的值

1.input文本框(this.state.value)
2.富文本框(this.state.value)
3.下拉框(this.state.value)
4.复选框(this.state.checked)
在这里插入图片描述
在这里插入图片描述

// 1 导入react
import React from 'react'
import ReactDOM from 'react-dom'
import "./index.css"

// 2 创建rect元素

// 方法1:使用React.createElement
// const title = React.createElement('h1',null,'Hello React!!!');

// 方法2:使用JSX
  // const title = <h1>Hello JSX<span>这是span</span></h1>
  // const name ="Hello JSX"
  // const sayHi = () => 'Hi!'
  // const dv = <div>我是div</div>
  // const title = (
  //  <div>
  //     <p>{name}<span className="title">这是span</span></p>
  //     <p>{sayHi()}</p>
  //     {dv}

  //  </div>
  // )

  // 类组件
class APP extends React.Component{
  state = {
    comments: [
      {id: 1, name:"z", content: "ddf"},
      {id: 2, name:"x", content: "dfgg"},
      {id: 3, name:"c", content: "ghhr"},
    ],
    // 评论人
    userName:'',
    // 评论内容
    userContent:''
  };
  renderList(){
    const {comments} = this.state
    if(comments.length == 0 ){
      return (<div className="no-comment"> 暂无评论,快去评论吧~ </div>)
    }
    return (<ul>
       {
        comments.map(item => (
           <li key={item.id}>
             <h3>评论人:{item.name}</h3>
             <p>评论内容:{item.content}</p>
           </li>
       ))}
     </ul>)


    // return this.state.comments.length == 0 
    //  ? (<div className="no-comment"> 暂无评论,快去评论吧~ </div>)
    //  :(<ul>
    //     {
    //      this.state.comments.map(item => (
    //         <li key={item.id}>
    //           <h3>评论人:{item.name}</h3>
    //           <p>评论内容:{item.content}</p>
    //         </li>
    //     ))}
    //   </ul>)
  }
  handleForm = (e) => {
    console.log( e.target.name);
    console.log( e.target.value);
    const {name,value} = e.target;
    this.setState({
      [name]: value
    })
  }
  addComments = () => {
    const {comments,userName,userContent} = this.state;

    // 非空校验
    if( userName.trim() === '' || userContent.trim() === '' ){
      alert('请输入评论人或评论内容')
      return
    }

    // 将评论信息添加到state中
    const newComments = [{
      id: Math.random(),
      name: userName,
      content: userContent
    },...comments]

    // console.log(newComments);
    // 文本框的值如何清空? 要清空文本框只需要将其对应的state清空即可
    this.setState({
      comments: newComments,
      userName:" ",
      userContent:" "
    })
  }

  render(){
    const { userName, userContent} = this.state;
    return (
      <div className="app">
        <div>
          <input className="user" type="text" placeholder="请输入评论人" 
          value={userName} 
          name="userName" 
          onChange={this.handleForm}
          />
          <br />
          <textarea className="content" cols="20" row="10" placeholder="请输入评论内容" 
          value={userContent} 
          name="userContent" 
          onChange={this.handleForm}
          />
          <br />
          <button className="btn" onClick={this.addComments}>发表评论</button>
        </div>

        {this.renderList()}
        {
        // this.state.comments.length == 0 
        // ? (<div className="no-comment"> 暂无评论,快去评论吧~ </div>)
        // :(<ul>
        //     {
        //       this.state.comments.map(item => (
        //         <li key={item.id}>
        //           <h3>评论人:{item.name}</h3>
        //           <p>评论内容:{item.content}</p>
        //         </li>
        //     ))}
        //   </ul>)
       }
        
      </div>
    )
  }
}


// 3 渲染react元素
ReactDOM.render(<APP />,document.getElementById('root'));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值