React & webpack &ant 学习

简介: React & webpack &ant 学习

创建工程目录

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

初始化工程

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

保证当前位于项目根目录

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

编写项目 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

使用组件

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

创建html界面

//在根目录下
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

编译项目

webpack

组件设计原则

不可以改变 props ,即 不可以改变 传入 参数

如果要改变参数 请单独在 state 中存储参数


编写计时器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

元素循环

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")
)

装饰器 @observer

被装饰的组件中的state 发生变化时,可以及时的渲染组件

来用装饰器实现一个 定时器


ant使用

安装与引入

npm install antd --save

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

组件地址

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

相关文章
|
2月前
|
前端开发 JavaScript
React学习之——条件渲染
【10月更文挑战第16天】React 中没有像Vue中v-if这种指令。React 中的条件渲染和 JavaScript 中的一样,使用 JavaScript 运算符 if 或者条件运算符去创建元素来表现当前的状态,然后让 React 根据它们来更新 UI。
|
3月前
|
前端开发 JavaScript
学习react基础(3)_setState、state、jsx、使用ref的几种形式
本文探讨了React中this.setState和this.state的区别,以及React的核心概念,包括核心库的使用、JSX语法、类与函数组件的区别、事件处理和ref的使用。
91 3
学习react基础(3)_setState、state、jsx、使用ref的几种形式
|
3月前
|
前端开发
学习react基础(2)_props、state和style的使用
本文介绍了React中组件间数据传递的方式,包括props和state的使用,以及如何在React组件中使用style样式。
42 0
|
2月前
|
JavaScript
webpack学习三:webpack初始化整合配置vue,一步一步的抽离代码块整合vue。
这篇文章是关于如何在webpack环境中配置Vue.js,包括安装Vue.js、解决报错、理解el与template的区别、使用SPA模式、抽离模板为对象、封装为单独的js文件、安装vue-loader时遇到的问题及解决方案,以及整个过程的总结。
96 2
webpack学习三:webpack初始化整合配置vue,一步一步的抽离代码块整合vue。
|
2月前
|
JavaScript
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
这篇文章介绍了如何将webpack的配置文件分离成开发环境和生产环境的配置文件,以提高打包效率。
54 1
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
|
2月前
|
JavaScript 前端开发 Java
webpack学习一:什么是模块化开发,什么是webpack,以及二者之间的关系。
这篇文章介绍了模块化开发的概念、历史和实现方式,以及webpack作为一个现代JavaScript应用的静态模块打包工具,它如何帮助我们将ES6等高级语法打包成浏览器可以识别的低级语法,并解释了npm在webpack安装和使用中的作用。
45 1
webpack学习一:什么是模块化开发,什么是webpack,以及二者之间的关系。
|
1月前
|
前端开发 JavaScript 安全
学习如何为 React 组件编写测试:
学习如何为 React 组件编写测试:
41 2
|
1月前
|
前端开发 JavaScript
手敲Webpack 5:React + TypeScript项目脚手架搭建实践
手敲Webpack 5:React + TypeScript项目脚手架搭建实践
|
2月前
|
资源调度 前端开发 JavaScript
React进阶学习
React进阶学习
17 1
|
2月前
|
移动开发 JavaScript 前端开发
webpack学习四:使用webpack配置plugin,来使用HtmlWebpackPlugin、uglifyjs-webpack-plugin、webpack-dev-server等插件简化开发
这篇文章主要介绍了如何通过配置Webpack的插件,如HtmlWebpackPlugin、uglifyjs-webpack-plugin和webpack-dev-server,来简化前端开发流程。
66 0
webpack学习四:使用webpack配置plugin,来使用HtmlWebpackPlugin、uglifyjs-webpack-plugin、webpack-dev-server等插件简化开发