资讯专栏INFORMATION COLUMN

React的元素、组件、事件、props传递

BlackMass / 1304人阅读

摘要:如果你不想这样每次改完代码都要手动编译,而且自己启动,那么就要用到这个玩意。

通过配置webpack-dev-server启动一个webserver,自动编译,自动刷新浏览器的功能,我们开启React基础速过

接上一篇:构建React开发环境

使用webpack-dev-server

按照上篇文章构建好React开发环境后,我们发现每次写完代码还需要手动编译,并且需要自己启动一个webserver才可以在浏览器预览效果。

如果你不想这样每次改完代码都要手动编译,而且自己启动webserver,那么就要用到webpack-dev-server这个玩意。

注意,这玩意就是开发时用用的,不要用于生产环境!

这玩意还有一个好处,是在改完代码后,自动刷新浏览器,下面动手加上这货吧

使用yarn安装webpack-dev-server 到开发依赖中

yarn add -D webpack-dev-server

添加webpack配置,配置devServer

vi webpack.config.js

"use strict";

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");

const config = {
    mode: "development",
    entry: {
        app: "./src/js/index"
    },
    output: {
        filename: "[name].js",
        path: path.join(__dirname, "build")
    },
    plugins: [
        new HtmlWebpackPlugin({
            filename: "index.html",
            template: "./src/pages/index.html"
        })
    ],
    module: {
        rules: [
            { test: /.js$/, exclude: /node_modules/, loader: "babel-loader"}
        ]
    },
    // 过滤
    externals: {
        "react": "React",
        "react-dom": "ReactDOM"
    },
    devServer: {
        contentBase: path.join(__dirname, "dist"),
        compress: true,
        port: 9000
    }
};

module.exports = config;

package.json中添加一个scripts

"dev": "webpack-dev-server"

启动webpack-dev-server

yarn run dev

之后就可以自动编译并启动一个webserver,用浏览器访问http://localhost:9000

React的元素

React的元素必须要有一个根元素包裹起来,如:

"use strict";

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

let me = 

编程故事

ReactDOM.render( me, // 使用元素 document.getElementById("root") );

元素里面可以包含js的表达式,表达式使用大括号{}包起来

let me = 

编程故事{alert("编程故事")}

React的组件

React的组件使用ES2015中的Class方式定义

"use strict";

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

// 组件可以外部定义然后在使用的地方在引入
class Me extends React.Component {
    render() {
        return 

dongjun{(function(){alert("编程故事")})()}

} } ReactDOM.render( , document.getElementById("root") );

React组件的props传递

父组件给子组件传递数据,是通过给子组件上定义属性,在子组件中通过this.props获取

传递多个属性:

"use strict";

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

class Me extends React.Component {
    render() {
        return 

{this.props.site} - {this.props.sologen} - {this.props.url}

} } ReactDOM.render( , document.getElementById("root") );

也可以传递一个对象给子组件的属性,在子组件也要通过对象的方式去获取

"use strict";

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

class Me extends React.Component {
    render() {
        return 

{this.props.site.name} - {this.props.site.sologen} - {this.props.site.url}

} } const map = { name: "编程故事", sologen: "我的故事,也许也是你的故事", url: "https://www.mi360.cn" }; ReactDOM.render( , document.getElementById("root") );

还可以使用ES2015中的解构赋值

"use strict";

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

class Me extends React.Component {
    render() {
        return 

{this.props.name} - {this.props.sologen} - {this.props.url}

} } const map = { name: "编程故事", sologen: "我的故事,也许也是你的故事", url: "https://www.mi360.cn" }; ReactDOM.render( , document.getElementById("root") );

React的事件

在组件中定义事件处理方法,在组件的render()方法中定义事件监听

"use strict";

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

class Me extends React.Component {

    showMe() {
        alert("编程故事");
    }

    render() {
        return 

{this.props.name} - {this.props.sologen} - {this.props.url}

} } const map = { name: "编程故事", sologen: "我的故事,也许也是你的故事", url: "https://www.mi360.cn" }; ReactDOM.render( , document.getElementById("root") );

还可以使用箭头函数直接在事件监听中处理

"use strict";

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

class Me extends React.Component {

    showMe() {
        alert("编程故事");
    }

    render() {
        return 

{this.props.name} - {this.props.sologen} - {this.props.url}

{ alert("编程故事") }} type="button" value="按钮"/>
} } const map = { name: "编程故事", sologen: "我的故事,也许也是你的故事", url: "https://www.mi360.cn" }; ReactDOM.render( , document.getElementById("root") );

父组件传递数组给子组件遍历

"use strict";

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

class Me extends React.Component {
    
    render() {
        return 
{this.props.data.map((item) => { return

{ alert(item.name) } }>{item.name} - {item.sologen} - {item.url}

})}
} } const map = [{ name: "编程故事", sologen: "我的故事,也许也是你的故事", url: "https://www.mi360.cn" },{ name: "246哈", sologen: "开心很简单", url: "https://www.246ha.com" }]; ReactDOM.render( , document.getElementById("root") );

原文链接:https://www.mi360.cn/articles...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105860.html

相关文章

  • React

    摘要:基础创建虚拟参数元素名称,例如参数属性集合,例如,,,从参数开始,表示该元素的子元素,通常这些元素通过创建,文本文件可以直接插入嘻嘻哈哈这是渲染器,将元素渲染到页面中。 React简介 FeceBook开源的一套框架,专注于MVC的视图V模块。实质是对V视图的一种实现。 React框架的设计没有过分依赖于某个环境,它自建一套环境,就是virtual DOM(虚拟DOM)。 提供基础AP...

    hlcc 评论0 收藏0
  • 【全栈React】第10天: 交互性

    摘要:我们可以使用函数构造函数将我们的组件转换为状态什么是函数构造函数在中,函数是一个在创建对象时运行的函数。我们将使用构造函数方法在对象创建时正确运行对象时设置实例变量。每当一个有一个属性被设置时,它会在该字段改变的每个时间调用函数。 本文转载自:众成翻译译者:iOSDevLog链接:http://www.zcfy.cc/article/3823原文:https://www.fullsta...

    马永翠 评论0 收藏0
  • 掌握react,这一篇就够了

    摘要:小明小明儿子,可以看到组件显示了父组件的。小明受控组件和非受控组件受控组件和非受控组件这些都是指的表单组件,当一个表单的值是通过改变的而不是通过是受控组件,否则就是非受控组件。 react众所周知的前端3大主流框架之一,由于出色的性能,完善的周边设施风头一时无两。本文就带大家一起掌握react。 jsx语法 前端MVVM主流框架都有一套自己的模板处理方法,react则使用它独特的jsx...

    Enlightenment 评论0 收藏0
  • 常见react面试题汇总(适合中级前端)

    摘要:但在中会有些不同,包含表单元素的组件将会在中追踪输入的值,并且每次调用回调函数时,如会更新,重新渲染组件。在构造函数中调用的目的是什么在被调用之前,子类是不能使用的,在中,子类必须在中调用。将使用单个事件监听器监听顶层的所有事件。 已经开源 地址:https://github.com/nanhupatar...关注我们团队:showImg(https://segmentfault.co...

    leone 评论0 收藏0
  • React入门看这篇就够了

    摘要:背景介绍入门实例教程起源于的内部项目,因为该公司对市场上所有框架,都不满意,就决定自己写一套,用来架设的网站。做出来以后,发现这套东西很好用,就在年月开源了。也就是说,通过钩子函 react - JSX React 背景介绍 React 入门实例教程 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套...

    luckyw 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<