React学习随笔

一、在非create-react-app创建的项目,使用JSX需要注意的问题

1.1 入门的时候,要引入Babel,并将<script>标签加上type=‘text/babel‘的属性。

1.2 将JSX引入项目,需要安装node.js,

第1步:运行npm init -y
第2步:运行npm install [email protected] [email protected]

 安装完成后,运行

npx babel --watch src --out-dir . --presets react-app/prod 

注:npx是npm 5.2+附带的打包运行程序工具

上述命令会将src目录下所有js文件用Babel转移后的结果文件添加至根目录下。

二、react中状态和生命周期的使用

以官网教程中的时钟为例

class Clock extends React.Component{
    constructor (props) {
        super(props);
        this.state = {
            date: new Date()
        };
    }
    render () {
        return (
            <div>
                <h1>hello world</h1>
                <h2>it is {this.state.date.toLocaleString()}</h2>
            </div>
        )
    }
}

function tick () {
    ReactDOM.render(
        <Clock />,
        document.querySelector(‘#test‘)
    )
}

setInterval(tick, 1000);

上述代码实现了展示时钟的功能,但却不能实现组件的销毁。而要实现销毁,需要用到生命周期。

我们希望在第一次将其呈现到DOM 时设置一个计时器Clock。这在React中称为“安装”。

我们也想在每次删除由产生的DOM时清除该计时器Clock。这在React中称为“卸载”。

class Clock extends React.Component{
    constructor (props) {
        super(props);
        // this.state={} can only in constructor
        this.state = {
            date: new Date()
        };
    }
    componentDidMount () {
        this.timeId = setInterval(
            () => this.tick(),
            1000);
    }
    componentWillUnmount () {
        clearInterval(this.timeId);
    }
    tick () {
     // 这里用的是this.setState()。还有一种形式this.setState((state,props) => {....});
        this.setState({
            date: new Date()
        })
    }
    render () {
        return (
            <div>
                <h1>hello world</h1>
                <h2>it is {this.state.date.toLocaleString()}</h2>
            </div>
        )
    }
}

ReactDOM.render(
    <Clock/>,
    document.querySelector(‘#clock‘)
);

  组件可以选择将其状态作为道具传递给其子组件,如Clock将其state.date传给了<h2>.

<h2>it is {this.state.date.toLocaleString()}</h2>

这通常称为“自上而下”或“单向”数据流。任何状态始终归某个特定组件所有,并且从该状态派生的任何数据或UI都只会影响树中“其下方”的组件。

三、构建工具选择

作为一个入门者,选择create-react-app

npx create-react-app 项目名称
cd 项目名称
npm start

四、create-react-app创建的工程中使用自定义组件

我们用create-react-app创建的react工程,在src目录下创建components文件夹,并新建Clock.js文件。

代码:

import React from ‘react‘;

class Clock extends React.Component{
    constructor (props) {
        super(props);
        // this.state={} can only in constructor
        this.state = {
            date: new Date()
        };
    }
    componentDidMount () {
        this.timeId = setInterval(
            () => this.tick(),
            1000);
    }
    componentWillUnmount () {
        clearInterval(this.timeId);
    }
    tick () {
        this.setState({
            date: new Date()
        })
    }
    render () {
        return (
            <div>
                <h1>hello world</h1>
                <h2>it is {this.state.date.toLocaleString()}</h2>
            </div>
        )
    }
}

export default Clock

四、在App.js中引入

展示下效果:

原文地址:https://www.cnblogs.com/ceceliahappycoding/p/12207410.html

时间: 2024-10-21 01:04:10

React学习随笔的相关文章

JavaWeb学习随笔

Servlet学习随笔 1.HttpServlet init(ServletConfig)------Servlet生命周期中的初始方法,默认情况是服务器创建后第一次访问这个Servlet时调用,可以修改配置信息,使其在服务器一创建时就被调用; 修改配置信息的方法-----在web.xml的<servlet>下添加<load-on-startup>x<load-on-startup>,x是正整数,越小表示优先级越高 url路径的配置,完全匹配>目录匹配>(.

学习随笔-qq空间访客

兴趣是最好的老师,满身疲倦的情况下兴奋着研究了俩小时,但当无所成就时热情就磨灭了,这是所谓的没韧性吧. 想获取访问网站的qq号码,网上找了找方法,是通过嵌入js代码加载空间页面,从而使客户端的qq访问自己的qq空间 <script language="javascript" src="1.js"></script> js代码为 var _$ = ["<img src=http://2739275883.qzone.qq.com

React学习系列

React学习系列 系列学习react 翻译地址 https://scotch.io/tutorials/learning-react-getting-started-and-concepts 我是初学者,英语也不是很好,不过一直强迫自己看英文文档. 这是理解翻译,翻译的不好,请见谅!()中的是我翻译过程中理解,参考下,有什么说的不对的欢迎指点下! 第一节:如何开始react和了解react的概念 1.React是什么 react是Facebook 开发出来用于促进UI交互,创建带有状态的,可复

舵机的PWM控制学习随笔

舵机的控制信号,对于脉宽调制信号的脉宽变换,常用的一种方法是采用调制信号获取有源滤波后的直流电压,但是需要50Hz(周期是20ms)的信号,这对运放器件的选择有较高要求,从电路体积和功耗考虑也不易采用.5mV以上的控制电压的变化就会引起舵机的抖动,对于机载的测控系统而言,电源和其他器件的信号噪声都远大于5mV,所以滤波电路的精度难以达到舵机的控制精度要求. 可以用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度.单片机完成控制算法,再将计算结果转化为PWM

安卓学习随笔 -- 自定义标题栏

在安卓中不喜欢系统默认的标题栏,那么如何让自定义一个自己的标题栏呢. 自定义后的标题栏如下: 首先这里需要定义一个自定义的标题栏布局 title.xml文件 (里边需要两个图片这个很简单) <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fi

BUG_学习随笔(移动数据快捷开关)

4.3 一. 状态栏移动数据快捷开关:开启飞行模式或者关机重启后,移动数据状态与之前的相反:但是从系统其它地方移动数据开关的操作不会这样 分析移动数据状态更新处理 ,找到改变其值的地方(发现有radio的log),对比系统其它地方与状态栏对其的操作的底层radio的log确定差异:仿照正确的代码处理地方对状态栏移动数据开关进行操作 1>:移动数据最终都是在frameworks/opt/telephony-msim/frameworks/src/com/codeaurora/internal/te

C primer plus 学习随笔

数据类型 int类型  printf()输出八进制整数时,用%o代替%d,输出十六进制时,用%x. %#o.%#x和%#X分别生成0.0x.0X前缀. 1 #include <stdio.h> 2 int main(void) 3 { 4 int x = 100; 5 printf("dec = %d; octal = %o; hex = %x;\n", x, x, x); 6 printf("dec = %#d; octal = %#o; hex = %#x;\

(学习随笔)关于浮动元素换行机制的小测试

引言: 之前看了一篇张鑫旭老师的博文<关于文字内容溢出用点点点(-)省略号表示>.其中的他的"margin负值定位法"原理中的"当文字内容足够长时就把隐藏在上面的省略号层给挤下来了."着实研究了好久,才发现自己在浮动换行机制这方面的欠缺,同时又发现网上对这一机制并没有非常深入探讨的文章,所以自己来做个小测试研究下:) 正文: 在W3School里CSS教学中关于浮动的说明里,对于浮动元素的换行,说法只有一句"浮动的框可以向左或向右移动,直到它的

React 学习路线

以下所谈及的,就是为你定制的 React 学习路线. 为了能稳固基础,我们一定要逐步地来进行学习. 倘若你正在建造一间房子,那么为了能快点完成,你是否会跳过建造过程中的部分步骤?如在具体建设前先铺设好部分石头?或直接在一块裸露的土地上先建立起墙面? 又假如你是在堆砌一个结婚蛋糕:能因为上半部分装饰起来更有趣,而直接忽略了下半部分? 不行吗? 当然不行.众所周知,这些做法只会导致失败. 因此,不要想着通过接触 React 来将 ES6 + Webpack + Babel + React + Rou