React——安装脚手架以及渲染标签

79 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

 基本使用

npm i react react-dom

react包核心 提供创建元素、组件等功能

react-dom包提供dom相关功能

脚手架安装

初始化项目命令 npx create-react-app 项目名

npx create-react-app object

创建React元素

const vdom = React.createElement('p',null,'脚手架');

渲染元素

ReactDOM.render(vdom,document.querySelector('#root'));

运行到浏览器

npm start

JSX

JavaScript XML 用js写html

jsx不是标准的es语法,浏览器不能直接识别,可以借助babel这样的工具编译处理

语法

1 不能用引号

2 属性名用驼峰命名法 class->className tabindex->tabIndex for->htmlFor

3 没有子节点的React元素可与使用/>结束

4 jsx语法结构推荐使用小括号包裹起来

函数组件的写法:

function Hello(){
    return (<h1>Hello 函数组件</h1>)
}
ReactDOM.render(<Hello />,document.querySelector('#root'))

1、函数名一定要大写,否则

2、函数必须要有返回值,否则

3、返回值为null表示不渲染任何内容

箭头函数写法:

const Hello = ()=>{
    return (<h1>Hello 函数组件</h1>)
}
ReactDOM.render(<Hello />,document.querySelector('#root'))

效果如下

遍历li标签

import React from "react";
import ReactDOM from "react-dom";

const data = [
    {
        id:1,
        name: 'zs'
    },
    {
        id: 2,
        name: 'lisi'
    },
    {
        id: 3,
        name: 'wangwu'
    }
];

let ul = (
    <ul>
        {data.map(item=> <li className="demo" key={item.id} style={ {color: 'red',backgroundColor: '#00f'} }>{item.name}</li>)}
    </ul>
)

ReactDOM.render(ul,document.querySelector('#root'));

类组件

1、类名称必须首字母大写

2、类组件继承Reaact.Component

3、类组件必须提供render()

4、必须要有返回值

/* 类组件 */
class Hello extends React.Component{
    render(){
        return (<h1>Hello 函数组件!!</h1>)
    }
}
ReactDOM.render(<Hello />,document.querySelector('#root'))
//ReactDOM.render(<Hello></Hello>,document.querySelector('#root'))

组件化写法:

// 创建Hi组件
import React from "react";

class Hi extends React.Component{
    render(){
        return(<h1>Hi,everyone</h1>)
    }
}
// 导出
export default Hi

在index.js中引入

import Hi from "./Hi";
ReactDOM.render(<Hi />,document.querySelector('#root'))

渲染点击事件

第一种写法 :

import React from "react";
import ReactDOM  from "react-dom";

// 事件绑定
class App extends React.Component{
    render(){ 
        return (<input type="button" onClick={()=>{
            console.log('已经被点击!');
        }} value="按钮"/>)
    }
}
ReactDOM.render(<App></App>,document.querySelector('#root'))

第二种写法:放在原型的实例化上面

import React from "react";
import ReactDOM  from "react-dom";

// 事件绑定
class App extends React.Component{
    handleClick() {
        console.log('已经被点击!');
    }
    render(){ 
        return (<input type="button" onClick={this.handleClick} value="按钮"/>)
    }
}
ReactDOM.render(<App></App>,document.querySelector('#root'))

第三种写法

function App() {
    function handleClick() {
        console.log('我被点击了');
    }
    return (<input type="button" onClick={this.handleClick} value="按钮"/>)
}
ReactDOM.render(<App></App>,document.querySelector('#root'))

import React from "react";
import ReactDOM  from "react-dom";
/* class App extends React.Component{
    constructor() {
        super()
        // 初始化状态
        this.state = {
            num: 0
        }
    }
    render(){
       return (<div>有状态组件</div>)
    }
} */
 
class App extends React.Component{
    state = {
        num: 100,
    }
    render(){
       return (<div>有状态组件  <button onClick={()=>{
        //    只能通过setState来修改数据
           this.setState({
               num: this.state.num +1
           })
       }}>+1</button>{this.state.num}<button onClick={()=>{
        //    只能通过setState来修改数据
           this.setState({
               num: this.state.num -1
           })
       }}>-1</button></div>)
    }
}
ReactDOM.render(<App/>,document.querySelector('#root'))