• 使用 React 完成一个 TODOList


    用 React 完成一个 todolist

    尝试一下之前没有接触过的框架: React。

    项目代码链接:GitHub

    项目预览链接:Git Pages

    测试账号:123

    测试密码:456

    通过使用 react 完成一个 TODOList,具有以下功能:

    1.可以注册并登录,PC和移动端都可以使用

    注册登录

    2.可以添加/删除 todo 选项

    添加/删除

    3.标记 todo 已完成

    selected

    4.展示 todo 列表


    项目初始化

    1.首先全局安装 react:cnpm i create-react-app

    2.进入项目目录下输入:create-react-app react-todolist

    (熟悉 vue-cli 的话他的作用和 vue init webpack xxx是一样的)

    3.进入项目目录,运行 cnpm start,然后他就会自动打开 http://localhost:3000/

    一个 react 项目就初步构建并可以运行了:

    react


    项目目录

    来看看运行命令后我们得到了一个什么样的项目骨架:

    .
    │  .gitignore
    │  package-lock.json
    │  package.json                 // 用于记录项目及引用库信息
    │  README.md
    ├─public                        // 用于存放静态资源
    │      favicon.ico
    │      index.html
    │      manifest.json
    │
    └─src                           // 用于存放所有源代码
            App.css
            App.js
            App.test.js
            index.css
            index.js                // 项目主入口
            logo.svg
            serviceWorker.js
    

    在 package.json 中还配置了相关的 npm 脚本:

      "scripts": {
        "start": "react-scripts start", // 执行 npm start ,相当于 vue-cli 中的 npm run dev,webpack 热启动
        "build": "react-scripts build", // 执行 npm build,相当于 vue-cli 中的 npm run build,打包构建文件
      },
    

    执行 npm build 后,项目会生成一个 build 文件夹(相当于 vue-cli build 后生成的 dist,存放用于发布的内容):

    build
    ├── asset-manifest.json
    ├── favicon.ico
    ├── index.html
    └── static
        ├── css
        │   ├── main.9a0fe4f1.css
        │   └── main.9a0fe4f1.css.map
        ├── js
        │   ├── main.19e75c9e.js
        │   └── main.19e75c9e.js.map
        └── media
            └── logo.5d5d9eef.svg
    

    Hello World

    在项目目录下的 src/index.js 文件中修改:

    // before
    ReactDOM.render(<App />, document.getElementById('root'));
    
    // after
    ReactDOM.render(
        <h1>Hello, world!</h1>,
        document.getElementById('root')
    );
    

    再看看 http://localhost:3000/ ,我们已经用 react 成功写出了「Hello World」。

    helloworld

    在 public/index.html 中,有一个 id 为 「root」 的 div 节点,代码的作用,就是将 h1 标签及其内容插入到这个节点中,所以我们才能看到「Hello World」


    部署

    如果要把 react 项目部署到 GitHub Pages 的话,需要:

    1.把 .gitignore 里的 build 一行删除

    2.在 package.json 中添加: "homepage": "https://no1harm.github.io/react-todolist/build" (后面的值为 gitpages 链接地址 + /build)

    3.运行 cnpm build

    4.重新 push 上 GitHub,可以看到项目的正常预览了。


    入门 / 熟悉基本概念

    React 入门教程

    • 把组件写入单独的文件:commit

    • 利用 props 传递数据:commit

    • state: commit

    注意

    setState不会立刻改变React组件中state的值

    函数式的setState用法,如:

    function increment(state, props) {
      return {count: state.count + 1};
    }
    function incrementMultiple() {
      this.setState(increment);
      this.setState(increment);
      this.setState(increment);
    }
    
    >同样是把状态中的count加1,但是状态的来源不是this.state,而是输入参数state
    
    

    具体可参见这里:setState

    React 的生命周期包括三个阶段:mount(挂载)、update(更新)和 unmount(移除)

    mount:第一次让组件出现在页面中的过程。这个过程的关键就是 render 方法。React 会将 render 的返回值(一般是虚拟 DOM,也可以是 DOM 或者 null)插入到页面中。

    其中的钩子函数:

    constructor()

    componentWillMount()

    render()

    componentDidMount()

    mount

    update:mount 之后,如果数据有任何变动,就会来到 update 过程

    其中钩子函数:

    componentWillReceiveProps(nextProps) - 我要读取 props 啦!

    shouldComponentUpdate(nextProps, nextState) - 请问要不要更新组件?true / false

    componentWillUpdate() - 我要更新组件啦!

    render() - 更新!

    componentDidUpdate() - 更新完毕啦!

    unmount:当一个组件将要从页面中移除时,会进入 unmount 过程

    其中钩子函数:

    componentWillUnmount()

    生命周期钩子函数

    生命周期: commit

    • setState

    尝试生命周期各个阶段 setState

    setState

    在对应报错信息,逐渐删除在生命周期钩子中的 setState 后,得出结论:

    一般只在这几个钩子里 setState:

    componentWillMount

    componentDidMount

    componentWillReceiveProps

    在哪里 setState


    antd

    问题:使用 antd 中的 Form .onSubmit 方法无效:

    点击提交按钮,如果没有执行 回调函数,原因是按钮需要包含在 form 表单内并且设置 htmlType={“submit”}。

    点击提交未报错设置的 rules 未进行判断是因为在 handleSubmit 内要设置 form.validateFields 进行域名校验。


    因为之前使用的框架是 Vue,对 react 远谈不上了解,可能是先入为主的原因,个人还是比较喜欢 Vue(因为对新人比较友好,文档也很全面。写得顺手了,用起 react 来竟然是有点无所适从…

    不过这个 TODOList 总算是完成了,也算是对 react 有了一点粗浅的认知吧。

  • 相关阅读:
    ADB server didn't ACK * failed to start daemon *
    老调重弹:年龄大了,码农何去何从(转)
    HR给应届生的黄金面试技巧
    Android自动开关机实现
    [Android实例] Android ShakeDetector(摇晃检测)教程详解
    Hadoop : MapReduce中的Shuffle和Sort分析
    获得和裁剪图片
    android bitmap compress(图片压缩)
    知识签名(signature of knowledge)
    SVN安装(eclipse)
  • 原文地址:https://www.cnblogs.com/No-harm/p/9876640.html
Copyright © 2020-2023  润新知