React & webpack &ant learning

Create project directory

projectName="rctWpkProj"
mkdir ${projectName}
mkdir ${projectName}/src
mkdir ${projectName}/src/components
mkdir ${projectName}/dist
cd ${projectName}

Initialize the project

package.json
npm init -y 


//-g 全局的依赖包
sudo npm install -g webpack

// --save 表明部署时候的依赖包
npm install --save react react-dom @types/react @types/react-dom

//--save-dev 开发时的依赖吧
npm install --save-dev typescript awesome-typescript-loader source-map-loader

// 安装 ui 组件
 npm install antd --save

npm install style-loader  css-loader --save

+tsconfig.json

Ensure that you are currently in the project root directory

cd ${projectName}

cat <<EOF > tsconfig.json
{
    
    
    "compilerOptions": {
    
    
        "outDir": "./dist/",
        "sourceMap": true,
        "noImplicitAny": true,
        "module": "commonjs",
        "target": "es6",
        "jsx": "react""allowJs": true,
        "allowSyntheticDefaultImports": true,
        "experimentalDecorators": true,
        "moduleResolution": "node",
    },
    "include": [
        "./src/**/*"
    ]}
EOF

Write project demo1

编写组件
cd src/components/

//创建组件文件
cat <<EOF >Hello.tsx
import * as React from "react"

export interface HelloProps {
    
    
  compiler :string;
  framework :string;
}

export const Hello = (props : HelloProps)=> <h1>Hello from {
    
    props.compiler} and {
    
    props.framework}!</h1>

EOF

Use components

cd src/

cat <<EOF >index.tsx
import * as React from "react"
import * as ReactDOM from "react-dom"
import {
    
     Hello } from "./components/Hello"

ReactDOM.render(
  <Hello compiler="typeScript" framework="React"></Hello>,
  document.getElementById("example")
)

EOF

Create html interface

//在根目录下
cd %projectName

//创建可以让react 挂载的 html 文件
cat <<EOF >index.html
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>Hello React!</title>
    </head>
    <body>
        <div id="example"></div>

        <!-- Dependencies -->
        <script src="./node_modules/react/umd/react.development.js"></script>
        <script src="./node_modules/react-dom/umd/react-dom.development.js"></script>

        <!-- Main -->
        <script src="./dist/bundle.js"></script>
    </body>
</html>
EOF

+webpack.config.js

//cd到项目目录
//cd到项目目录
cd $projectName
//创建 webpack 打包配置文件


cat <<EOF >webpack.config.js
module.exports = {
    
    
    entry: "./src/index.tsx",
    output: {
    
    
        filename: "bundle.js",
        path: __dirname + "/dist"
    },

    // Enable sourcemaps for debugging webpack's output.
    devtool: "source-map",

    resolve: {
        // Add '.ts' and '.tsx' as resolvable extensions.
        extensions: [".ts", ".tsx", ".js", ".json"]
    },

    module: {
        rules: [
            // All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
            { test: /\.tsx?$/, loader: "awesome-typescript-loader" },

            // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
            {
    
     enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
        ]
    },

    // When importing a module whose path matches one of the following, just
    // assume a corresponding global variable exists and use that instead.
    // This is important because it allows us to avoid bundling all of our
    // dependencies, which allows browsers to cache those libraries between builds.
    externals: {
    
    
        "react": "React",
        "react-dom": "ReactDOM"
    },};

EOF

Compile the project

webpack

Component design principles

You cannot change props, that is, you cannot change the incoming parameters

If you want to change the parameter, please store the parameter separately in state

Write a timer demo

cd src/components

//创建计时器组件
cat <<EOF >Clock1.tsx
import * as React from "react"
import ReactDOM = require("react-dom")


export class Clock1 extends React.Component<{
    
    name:string}> {
    
    

  getMilliTime =()=>{
    
    
    
    let time1=new Date()
    let timeString=`${
     
     time1.toLocaleString()} 毫秒:${
     
     time1.getMilliseconds().toString()} `
    return timeString
  }

  state ={
    
    
    // date:new Date().toLocaleTimeString(),
    date:this.getMilliTime(),
    interval1 : 0,
    name :''
  }

  constructor(props:any){
    
    
    super(props);
  }

  cancelIntval = (e:any )=> {
    
    
    clearInterval( this.state.interval1);
  }
  creatIntval =(e:any) =>{
    
    
    this.setState({
    
    
      date:this.getMilliTime()
    })
    var  val1= setInterval(()=>{
    
    
      this.setState({
    
    
        date:this.getMilliTime(),
      })
    } , 10)
    this.setState({
    
     interval1:val1 })
  }

  componentDidMount(){
    
    
    this.creatIntval(event)
  }

  render(){
    
    
    const divStyle = {
    
    
      display : 'flex',
      border: '1px solid',
    }
    const outerDivStyle={
    
    
      padding :'10px'
    }
    return (
      <div style={
    
    outerDivStyle}> 
      <div style={
    
    divStyle}>
        <h2>clock.NO{
    
    this.props.name}</h2>
        <h2>now time is {
    
    this.state.date}</h2>
        <button onClick={
    
    this.cancelIntval}>暂停计时</button>
        <button onClick={
    
    this.creatIntval}>开始计时</button>
      </div>
      </div>
    )
  }
}
EOF

Element cycle

import * as React from "react"
import * as ReactDOM from "react-dom"
import {
    
     Hello } from "./components/Hello"
import {
    
     ClassHello } from "./components/ClassHello"
import {
    
     Clock1 } from "./components/Clock1"

function ManyClock(){
    
    
  //主要代码, 
    // 生成 连续自然数数组
  var arrays= Array.from(Array(6).keys()) 
//把数组元素变换成标签
  var elemlists =arrays.map((item1)=>{
    
    
    let item=item1+1
    return (<Clock1 key={
    
    item.toString()}  name={
    
    item.toString()}></Clock1>)
  })
  return (
    <div>
      {
    
    elemlists}
    </div>
  )
}

ReactDOM.render(
  // <Hello compiler="typeScript" framework="React"></Hello>,
  // <ClassHello name="12" compiler="tpc" framework="react"></ClassHello>,
  // <Clock1 ></Clock1>,
  <ManyClock></ManyClock>,
  document.getElementById("example")
)

Decorator @observer

When the state of the decorated component changes, the component can be rendered in time
to implement a timer with the decorator

ant use

Installation and introduction
npm install antd --save

import * as React from "react"
import {
    
     Button, DatePicker, version } from "antd";
import 'antd/dist/antd.css'

Component address

https://ant-design.gitee.io/components/overview-cn/

Guess you like

Origin blog.csdn.net/qq_43373608/article/details/107877103