设为首页 加入收藏

TOP

前端笔记之React(一)初识React&组件&JSX语法(二)
2019-09-17 19:00:37 】 浏览:103
Tags:前端 笔记 React 初识 React& 组件 &JSX 语法

react中,所有以大写字母开头的都是组件,而不是标签。

 

ReactDOM.render(jsx,根的挂载点)

ReactDOM只能出现一次,但是非常厉害,可以和HTML结合

 

jsx,现在一律在js文件夹中开发,并不是传统放html开发

HTMLCSSJS都被构建到bundle.js文件夹中。

 

安装以下插件,输入rcc即可快速生成一个组件的语法:

 


2.2组件可以多层嵌套

main.js文件中引入App.js组件,App组件里面的render函数还可以引入其他组件。

components/Child.js

import React from "react";
export default class Child extends React.Component {
    constructor() {
        super();
    }
    render() {
        return <div>
            <h1>我是Child子组件!</h1>
        </div>
    }
}

 

App父组件中引入:

import React from "react";
import Child from "./components/Child";
// 默认暴露一个构造函数(类组件)
export default class App extends React.Component {
    constructor() {
        super();
    }
    render() {
        return <div>
            <h1>我是App组件!</h1>
            <Child></Child>
            <Child></Child>
            <Child></Child>
        </div>
    }
}

简单的说:在react中做一个组件:

第一步:创建一个类并暴露

第二步:引入这个类,然后用这个类的类名当做组件的标签(实例化)


2.3函数式组件

一个函数,如果是大写字母开头,并且return一个React Element就是一个组件。

比如App.js组件中,创建一个Child1的函数,这个函数直接返回JSX语法的React Element,此时这个函数就是组件,这个函数直接成为自定义标签,就可以用了。

import React from "react";
import Child from "./components/Child";
// 默认暴露一个构造函数(类组件)

//定义一个自定义的函数组件
const Child1 = ()=> <div>
    <h1>我是Child1函数式组件!</h1>
</div>

export default class App extends React.Component {
    constructor() {
        super();
    }
    render() {
        return <div>
            <h1>我是App组件!</h1>
            <Child></Child>
            <Child1></Child1>
        </div>
    }
}

注意:

1render是一个函数,所以函数里面当然可以定义另一个函数。我们用const来定义一个箭头函数,这个箭头函数的名字,必须首字母大写。react中所有标签名字是首字母大写的,将被判定为我们自己的组件。

2)这个函数里面return了一个jsx对象,注意,不要加引号。初学者会有很多不适。

3)这个组件也是通过“标签”的形式来上树的!

4)函数式组件比类组件差很多功能很多,后面会说。

5)至于什么时候用什么组件、圆括号中能不能传入参数,后面会说。

 

函数式组件有个缺点,没有state,没有生命周期。


三、JSX语法

所有对React不适应,都是JSX语法造成的,JSX语法淡化了JSHTML之间的“边界”。

 

3.1标签必须合理嵌套

错误的:

import React from "react";
import ReactDOM from "react-dom";
// 引入组件
import App from "./App.js"
ReactDOM.render(
    <App></App>
    <App></App>
    <App></App>
  ,
  document.getElementById('app')
);

 

有多个组件,必须有一个标签包裹所有组件:

import React from "react";
import ReactDOM from "react-dom";
// 引入组件
import App from "./App.js"
ReactDOM.render(
  <div>
     <App></App>
     <App></App>
     <App></App>
  </div>
  ,
  document.getElementById('app')
);

 

比如table不能直接嵌套tr,必须要有tbody

import React from "react";
export default class App extends React.Component {
    constructor() {
        super();
    }
    render() {
        return <div>
            <table>
                <tbody>
                    <tr>
                        <td>1</td>
                        <td>2</td>
                    </tr>
                </tbody>
            </table>
        </div>
    }
}

 

比如这样也是错误的:

 <p><div>111</div></p>


3.2 return不能换行

return后面直接跟着div,不能换行

 

 

如果想换行,必须加圆括号包裹。

import React from "react";
export default class App extends React.Component {
    constructor() {
        super();
    }
    render() {
        return (
            <div>
                <h1>我是App
首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇深入V8引擎-Time核心方法之win篇(.. 下一篇前端常见面试题总结1

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目