DEV Community

Jihao Deng
Jihao Deng

Posted on

RCT005 React Scaffold

React脚手架

使用React开发一个单独的前端项目,也就是前后端分离后的前端部分。

create-react-app

create-react-app是FaceBook的React团队官方出的一个构建React单页面应用的脚手架工具。

安装

利用npm来进行全局安装。

npm install -g create-react-app
Enter fullscreen mode Exit fullscreen mode

创建项目

create-react-app xxx
Enter fullscreen mode Exit fullscreen mode

创建的项目会是一个nodejs的项目,并且已经自动配好了react的环境。

运行项目

通过查看生成的package.json文件,可以知道通过npm run start来运行项目,输入指令后,会自动以端口号3000运行,并打开浏览器。

项目结构

项目内除了node_modules文件夹用来存储包,还有:

  • src文件夹存储页面(js文件)和css文件,包括入口文件index.js
  • public文件夹存储静态资源,包括整个项目的基础index.html

create-react-app 的 Hello World

将之前的To do List 迁移到脚手架里,我们需要替换App.jsApp.css里面的内容,其他都不需要改变。

App.js

import React from 'react';
import './App.css';

class App extends React.Component {

  state = {
    value: '',
    list: []
  }

  handleAdd = () => {
    const val = this.state.value;
    const list = this.state.list;
    //或 es6结构语法
    // const{val,list} = this.state;
    list.push(val);
    this.setState({
      list: list
      //es6中 当list和value相等时,可以省略key
      //由list:list 简写为 list
    })
  }

  handleInput = (event) => {
    this.setState({
      value: event.target.value
    })
  }

  handelRemove = (event) => {
    var kk = event.target.dataset.bid
    console.log(kk)
    var arr = this.state.list;
    arr.splice(kk, 1)  // delete the item with index kk
    this.setState({
      list: arr
    })
  }

  render() {
    const val = this.state.value;
    const arr = this.state.list;
    const listItem = []
    for (var i = 0; i < arr.length; i++) {
      listItem.push(
        <li key={i}>
          {arr[i]}
          <button data-bid={i} onClick={this.handelRemove}>remove</button>
        </li>
      )
    }

    return (
      <div className="container">
        <p>欢迎学习react</p>
        <h1>Hello World</h1>
        <div>
          <input type="text" value={val} onChange={this.handleInput} placeholder="To do" />
          <button onClick={this.handleAdd}>Add Item</button>
        </div>
        <ul>
          {listItem}
        </ul>
      </div>)
  }
}

export default App;
Enter fullscreen mode Exit fullscreen mode

App.css

.container {
  text-align: center;
  margin: 20px auto;
}
.container p {
  font-size: 10px;
}
.container h1 {
  font-size: 20px;
  color: #02043d;
}
Enter fullscreen mode Exit fullscreen mode

实际上,这个脚手架做的事情是:

  1. App.js里面写了一个<App />标签
  2. index.js里面将 <div> <App /> </div>渲染到了index.html中

也就是说,我们是一个单页面应用,我们开发时只需要修改App等相关文件就可以了。我们项目中看上去是页面跳转,实际上是<App>标签发生了改变,react重新渲染了它。

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (0)

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay