美文网首页
03 react组件

03 react组件

作者: Aries蓝 | 来源:发表于2019-12-02 11:08 被阅读0次

1.一个普通的 构造函数就是 组件

function Hello(props ) {

 // props 所有的属性都是只读的
 // 接受父组件传递过来的参数

 // 结论:不论是 vue 还是 React 组件中的props 永远都是只读的,不能重新赋值

  // 如何在一个组件中 return 一个null ,表示组件是空的,什么都不会渲染
  // return null

  //在组件中,必须返回一个合法的 JSX 虚拟DOM 元素

let name = props.name //  大黄

return <div>这是Hell哦哦哦</div>
}


// 给组件传递参数  在组件上加属性
let name = '大黄'

ReactDOM.render(
  <Hello name={name}></Hello>
  ,document.getElementById('app')
)

给组件传递props 参数步骤:
1.给组件添加属性,使用 <Hello name={name}></Hello>

let dog  =  {
name :'基督教',
age:18,

}
 // 方式一
<Hello name={dog.name}  age = {dog.age}>
</Hello>
// 方式二 
<Hello (...dog)>
</Hello>

2.在组件构造函数中接受参数function Hello(props ) {} 参数在props对象中 props 是只读的

2 创建一个JSX文件

1 创建一个 Demo.jsx文件


import React from 'react'; // 创建组件,虚拟DOM元素,生命周期

//我们看到,代码中除了开头引入时出现了React,其它地方都没有其踪影。但是当去掉import React from "react"时,程序却会执行出错ReferenceError: React is not defined。


// 为什么每个函数组件需要引入 react  因为 我们的JSX语法只是一种语法糖,它最终会被转译成纯粹的js语法,因此在babel转译之后,我们的代码就变成了:

//比如
const App = () => (
  <div>Hello World!!!</div>
);

//转译后的
var App = function App() {
  return React.createElement(
    "div",
    null,
    "Hello World!!!"
  );
};



function Demo(props) {

    return <div>这是一个组件</div>
}

// 把组件导出

export default Demo

2.然后在需要使用组件的地方引入组件

// 默认,如果不做单独的配置,不能省略 .jsx 后缀名


import React from 'react'; // 创建组件,虚拟DOM元素,生命周期
import ReactDOM from 'react-dom' ;//把创建好的组件和虚拟DOM放到页面上展示的

import Demo from './../components/Demo.jsx'
ReactDOM.render(
    <div>
        <Hello name={name}></Hello>
        <Demo></Demo>
    </div>
    ,document.getElementById('app')
)

如果想省略.jsx 后缀名的话 需要配置 webpack
在webpack.config.js 加入 resolve

module.exports = {
    mode:'production' ,//development production

    //在 webpack 4.x 中。有个很大的特性,就是约定大于配置 约定,默认打包入口路径是 src -> index.js
    //那些node 支持 chrome 支持的就行


    plugins:[
        htmlPlugin
    ],
    module: { //所有第三方 模块的配置规则
        rules: [
            { test: /\.js|jsx$/, use: 'babel-loader', exclude: /node_modules/ }
            // 千万不要忘记加 exclude 排除选项
        ]
    },
    resolve:{
        extensions:['.js','.jsx','.json'] ,//表示这几个文件的后缀名,可以省略不写,这几个位置很重要 按顺序补全的
     alias:{
            '@':path.join(__dirname,"./src") // 配置别名
        }
    }
}

3 将组件用Class 创建

import React from 'react'; // 创建组件,虚拟DOM元素,生命周期
import ReactDOM from 'react-dom' ;//把创建好的组件和虚拟DOM放到页面上展示的


// 如果要使用 class 定义组件,必须让自己的组件,继承自React.Component

// class 组件名称 extends React.Component{
//
//     // 在组件内部,必须有 render 函数
//
//     render(){
//
//         //render 函数中,必须返回合法的 JSX 虚拟 DOM 结构
//         return <div>jskdksk</div>
//     }
// }

var arr = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]


class Movie extends React.Component {
 constructor(){

        // 由于Movie组件,继承了 React.Component 这个父类,所以自定义的构造器中,必须调用super()
        super()

        this.state = {
            msg :'大家好我是 Movie 私有组件'

        }  // 这个 this.state={} 就相当于 Vue 中的 data(){return{}}
    }
    render() {

        // return null
        // 在class 关键字 创建 的组件中,如果要使用 外界传递过来的 props 参数,不需要接收,直接通过哦this.props.****来接收
        return <div>
            这是 movie
            {
                arr.map((item) => {
                    return <div>{item}</div>
                })
            }


            {/*{注意在 class 组件中 this 指向当前组件的实例对象}*/}
            <div>{this.props.name}</div>

            {/*{state私有数据}*/}
            <div>{this.state.msg}</div>
        </div>


    }

}

export default Movie

3 两种创建组件方式的对比

注意:使用class 关键字创建的组件,有自己的私有数据 和生命周期
注意:使用function 创建的组件,只有props ,没有自己私有数据和生命周期函数。
class 创建出来的 state 可读可写

1.用构造函数创建出来的组件:叫做无状态组件(无状态组件今后用的不多)
2.用class 关键字创建出来的组件:叫做有状态组件

有状态组件和无状态组件之间的本质区别就是:有误state 属性,和有无生命周期
3:什么情况下使用有状态组件?什么情况下使用无状态组件?
如果一个组件需要自己的私有数据,则推荐使用Class 创建的 有状态组件
如果一个组件不需要私有数据,则推荐使用:无状态组件
React 官方说:无状态组件,由于没有state和 生命周期函数 所以运行效率会比有状态组件快一些
4.组件中的 props 和 state/data 之间的区别

props 中的数据都是外界传过来的
state/data 中的数据,都是组件私有的
 props中的数据都是只读的,不能重新赋值
 state/data中的数据都是可度可写的

相关文章

  • React基础

    React包含react元素和react组件 react元素 react组件 react组件分为函数组件和类组件 ...

  • 03 react组件

    1.一个普通的 构造函数就是 组件 给组件传递props 参数步骤:1.给组件添加属性,使用

  • 翻译|如何使用React,Redux和Immutable.js构

    本文是翻译版本,原文请见By Dan Prince May 03, 2016 React使用组件和单向数据流方式...

  • 问题记录-antd Table

    2019-03-29ant design Table组件关于column的key官方文档中说这个key是React...

  • 组件

    组件是React的基石,所有的React应用程序都是基于组件的。React组件,可以通过React.createC...

  • ReactNative学习笔记(三)Hello World!

    React Native 看起来很像 React,但React Native的基础组件是原生组件 不是web组件。...

  • vue如何封装一个全局组件

    date: 2017-12-03 10:40:49tags: 背景 上篇介绍了如何封装一个react全局组件,这篇...

  • react子组件向父组件传值

    相关资料:react 父组件怎么获取子组件的这个值React组件间信息传递方式react同级组件之间传值 • 父...

  • React 进阶二 组件详解

    React组件 React的组件大概分为俩部分,无状态组件和有状态组件 无状态组件。下面React官网中定义的一个...

  • 2、react基础介绍

    React理念 划分组件边界的原则 React组件的数据种类 React组件的声明周期 组件的划分 高内聚 低耦合...

网友评论

      本文标题:03 react组件

      本文链接:https://www.haomeiwen.com/subject/edexgctx.html