精华内容
下载资源
问答
  • react加ts
    2021-09-12 12:15:02

    目录

    使用步骤

    1.安装create-react-app

    2.搭建react+ts脚手架


    使用步骤

    1.安装create-react-app

    npm i create-react-app -g 或 yarn add create-react-app -g
    

    2.搭建react+ts脚手架

    npx create-react-app (项目名,不要使用中文,会报错) --template typescript
    

    未完待续。。。

    更多相关内容
  • Create React App入门该项目是通过引导的。可用脚本在项目目录中,可以运行:yarn start 在开发模式下运行应用程序。 打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。 您还将在控制台中看到任何棉绒错误...
  • React结合TS打造旅游电商平台源码.zip
  • 基于react + ts + antd建立的管理后台脚手架模版 线上地址 git地址 单独使用 详情请查看 1.配置抽屉 1-1。可缓存系统配置 记录用户使用的系统配置,缓存浏览器中,记录用户习惯。 1-2.antd换肤(Layout组件未封装)...
  • 电子应用程序样板# copy this repogit clone --depth 1 git@github.com:my-init/electron-react-ts.git yourAppName# DEVyarnyarn dev特征电子React打字稿通过customize-cra定制了CRA配置, react-app-rewired ...
  • React-ts:React-ts项目

    2021-03-31 00:12:10
    ReactReact-ts项目
  • TSLint规则,用于检测React Hooks的无效使用
  • umi、dva、React
  • react + ts or vue + ts 通用axios封装的方法。 封装通用ts类型,封装通用requestMode.ts,统一存放api请求路径
  • react-ts-init:react-ts-init

    2021-04-07 00:55:24
    React教程Create React App入门该项目是通过引导的。可用脚本在项目目录中,可以运行:yarn start 在开发模式下运行应用程序。 打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。 您还将在控制台中看到...
  • react-ts-project-template ├── babel.config.js ├── build # Webpack 配置文件目录 │ ├── webpack.base.config.js # Webpack 基础配置文件 │ ├── webpack.dev.config.js # Webpack 开发环境配置文件 ...
  • react项目添加ts

    千次阅读 2021-01-19 15:14:37
    1、react + antd + ts yarn create react-app xxx --template typescript 安装antd yarn add antd 2、react + ts yarn create-react-app xxx --template typescript 已有react项目 1、安装ts npm i ...

    新项目创建

    1、react + antd + ts

    yarn create react-app xxx --template typescript

    安装antd

    yarn add antd

    2、react + ts

    yarn create-react-app xxx --template typescript

    已有react项目

    1、安装ts

    npm i typescript -g 全局安装
    npm i typescript -D 当前项目安装

    2、tsc --init

    修改tsconfig配置文件

    {
      "compilerOptions": {
         "target": "es5", /**指定ECMAScript目标版本**/                   
         "module": "commonjs", /**指定生成哪个模块系统代码**/ 
         "allowJs": true,  /**允许编译js文件**/                     
         "jsx": "preserve",  /**支持JSX**/                  
         "outDir": "build",  /**编译输出目录**/    
         "strict": true, /**启用所有严格类型检查选项**/ 
         "noImplicitAny": false, /**在表达式和声明上有隐含的any类型时报错**/          
         "skipLibCheck": true,  /**忽略所有的声明文件的类型检查**/                   
         "forceConsistentCasingInFileNames": true   /**禁止对同一个文件的不一致的引用**/   
      },
      "include": ["src"] /**指定编译目录**/ 
    }
    

    3、安装依赖(npm —S)

    yarn add typescript
    yarn add @types/react @types/react-dom

    展开全文
  • react-ts

    2021-03-06 00:44:10
    Create React App入门该项目是通过引导的。可用脚本在项目目录中,可以运行:npm start 在开发模式下运行应用程序。 打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。 您还将在控制台中看到任何棉绒错误...
  • react-ts-template自用react ts版本模板包含多环境参数切换,代码校验,css打包配置优化,打包优化等等通用化功能已添加码头工人部署相关配置文件,可以自己制作码头工人进行进行部署
  • tslint-reactTSLint和TypeScript具有同级依赖。 要将这些lint规则与默认预设一起使用,请通过extends关键字使用配置继承。 这是一个示例配置,其中tslint.json与node_modules文件夹相邻: { "extends" : [ "ts...
  • 让我们使用React + Type脚本实现购物车功能页面组成家每种类别都有3种推荐产品产品列表所有产品裸露每个产品都必须提供图像,价格和产品名称每个产品都有可以添加到购物车中或从购物车中删除的功能。 购物篮暴露...
  • ts-react-todoList 用react + ts完成简单的todoList import React , { useEffect , useRef , useState } from "react" ; import "./App.css" ; import produce from "immer" ; interface TodoList { id: string ; ...
  • React模板React + Typescript项目模板webpack4 babel7 埃斯林特antd4 更漂亮wa还有一些东西工作箱相关@ loadable /组件删除␍ (漂亮/漂亮)错误git config --global core.autocrlf否去做增加Git提交消息1.1 npm ...
  • Create React App入门该项目是通过引导的。可用脚本在项目目录中,可以运行:yarn start 在开发模式下运行应用程序。 打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。 您还将在控制台中看到任何棉绒错误...
  • react-ts-storybook-storyshots 具有Storybook和Storyshots的TypeScript中的简约React模块 功能标签 笑话 React 快照 起动机 故事书 故事情节 模板 测试 打字稿 UI 直接祖先 直接后代-也通过代码 要求 怀旧 yarn ...
  • React打字稿模板 React Typescript项目样板 开始使用 yarn 地方发展 启动开发服务器 yarn start 运行测试 运行您所有的测试文件 yarn test 建造 将网站build到build文件夹中 yarn build 埃斯林特 扩展react-app...
  • React吉拉React+ ts吉拉
  • react+ts搭建

    千次阅读 2022-04-19 10:39:34
    react+ts搭建

    一、通过create-react-app脚手架创建项目
    npx create-react-app testproject --template typescript
     在vscode中打开项目,可以看到顺利生成了react项目且组件的后缀为tsx,此时说明成功创建了react+typescript项目的雏形

     在项目根目录下,运行npm run start,成功启动项目

    npm run start

    二、配置路由
    npm i react-router-dom@5.2.0 react-router-config @types/react-router-config @types/react-router-dom -S
    src目录下创建views文件夹,views内创建Home,Contact,About,Navbar四个tsx文件,其中Navbar用来控制路由,其他三个页面用来展示

    Home:

    import React, { Component } from "react";
     
    export default class Home extends Component {
      render() {
        return (
          <div className="home">
            <div className="container">
              <h3 className="center"> Home页面</h3>
              <p>欢迎来到首页</p>
            </div>
          </div>
        );
      }
    }
    Contact:

    import React, { Component } from "react";
     
    export default class Contact extends Component {
      render() {
        return (
          <div className="contact">
            <div className="container">
              <h3 className="center"> Contact页面</h3>
              <p>欢迎来到联系我们页面!</p>
            </div>
          </div>
        );
      }
    }
    About:

    import React, { Component } from "react";
     
    export default class About extends Component {
      render() {
        return (
          <div className="about">
            <div className="container">
              <h3 className="center"> About页面</h3>
              <p>欢迎来到关于我们页面!</p>
            </div>
          </div>
        );
      }
    }
    Navbar:

    import React, { Component } from "react";
     
    export default class Navbar extends Component {
        render() {
            return (
                <nav className="nav-wrapper">
                    <div className="list">
                        <ul>
                            <li><a href='/'>Home</a></li>
                            <li><a href='/about'>About</a></li>
                            <li><a href='/contact'>Contact</a></li>
                        </ul>
                    </div>
                </nav>
            )
        }
    }


    src目录下创建routes文件夹,同时创建index.ts,使用RouteConfig对路由进行统一管理

    // 导入路由组件
    import Home from '../views/Home'
    import About from '../views/About'
    import Contact from '../views/Contact'
    // 导入路由管理工具
    import {RouteConfig} from 'react-router-config'
     
    const routes:RouteConfig = [
      {
        path:'/',
        exact:true,
        component:Home
      },
      {
        path:'/about',
        exact:true,
        component:About
      },
      {
        path:'/contact',
        exact:true,
        component:Contact
      }
    ]
     
    export default routes;


     App.tsx中引入Route,Navbar和路由管理工具

    import React from "react";
    // 引入路由导航栏
    import Navbar from "./views/Navbar";
    // 引入routes组件
    import routes from "./routes";
    // 引入包管理工具
    import { renderRoutes, RouteConfig } from "react-router-config";
    import "./App.css";
     
    function App() {
      return (
        <div className="App">
          <Navbar />
     
          {/* 设置routes的类型为RouteConfig[],否则报错 */}
          {renderRoutes(routes as RouteConfig[])}
        </div>
      );
    }
     
    export default App;


    根目录index.tsx中这样定义

    import React from "react";
    import ReactDOM from "react-dom";
    import "./index.css";
    import App from "./App";
    import reportWebVitals from "./reportWebVitals";
    import { BrowserRouter as Router } from "react-router-dom";
     
    ReactDOM.render(
      <React.StrictMode>
        <Router>
          <App />
        </Router>
      </React.StrictMode>,
      document.getElementById("root")
    );
     
    // If you want to start measuring performance in your app, pass a function
    // to log results (for example: reportWebVitals(console.log))
    // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
    reportWebVitals();
     至此,路由配置就完成了,启动项目如果出现以下错误,

     运行命令

    npm i react-router@5.2.0 -s
     然后重新运行即可,你的页面应该是这样的

     有点难看是吧,我们给App添加一点样式

    * {
      padding: 0;
      margin: 0;
    }
     
    h1 {
      text-align: center;
      font-size: 45px;
      font-family: Arial, Helvetica, sans-serif;
      color: rgb(6, 0, 32);
      padding: 40px;
    }
     
    .list {
      display: flex;
      justify-content: center;
      width: 100%;
    }
     
    .list ul li {
      list-style: none;
      margin: 42px;
      text-align: center;
    }
     
    a {
      text-decoration: none;
      color: rgb(0, 0, 0);
      font-size: 18px;
      font-family: Arial, Helvetica, sans-serif;
      padding: 14px 25px;
      background-color: transparent;
      border: 2px solid rgb(12, 0, 66);
    }
     
    a:hover {
      background-color: rgb(12, 0, 66);
      color: rgb(255, 255, 255);
    }


    三、配置less
     第一种方式:暴露配置的方式
    npm run eject
    此时项目多出了config文件夹

    安装less和less-loader

    npm i less less-loader -S
    仿照sass修改config目录下的webpack.config.js:

    1. 找到config目录下的webpack.config.js文件,在50-70行之间有个cssRegex,在此处添加

    // less
    const lessRegex = /\.less$/;
    const lessModuleRegex = /\.module\.less$/;
    2. 在webpack.config.js文件500多行有个sassRegex,模仿写对应的lessRegex

    // less
                {
                  test: lessRegex,
                  exclude: lessModuleRegex,
                  use: getStyleLoaders(
                    {
                      importLoaders: 2,
                      sourceMap: isEnvProduction && shouldUseSourceMap,
                    },
                    'less-loader'
                  ),
                  sideEffects: true,
                },
                // less
                {
                  test: lessModuleRegex,
                  use: getStyleLoaders(
                    {
                      importLoaders: 2,
                      sourceMap: isEnvProduction && shouldUseSourceMap,
                      modules: true,
                      getLocalIdent: getCSSModuleLocalIdent,
                    },
                    'less-loader'
                  ),
                },
    3.重新启动项目,创建less文件并引入

    样式生效,说明less配置成功

    这种方式有个不好的地方,就是会产生很多不必要的js文件,且这个操作不可逆,等到后期项目上传时造成代码冗余,不好维护。

    第二种方式:找到config.js文件直接修改
    1.找到文件路径:node_modules\react-scripts\config\webpack.config.js

     2.在60-80行之间有个cssRegex,在此处添加

    // less
    const lessRegex = /\.less$/;
    const lessModuleRegex = /\.module\.less$/;
    3. 在550多行有个sassRegex,模仿写对应的lessRegex

    // less
                {
                  test: lessRegex,
                  exclude: lessModuleRegex,
                  use: getStyleLoaders(
                    {
                      importLoaders: 2,
                      sourceMap: isEnvProduction && shouldUseSourceMap,
                    },
                    "less-loader"
                  ),
                  sideEffects: true,
                },
                // less
                {
                  test: lessModuleRegex,
                  use: getStyleLoaders(
                    {
                      importLoaders: 2,
                      sourceMap: isEnvProduction && shouldUseSourceMap,
                      modules: true,
                      getLocalIdent: getCSSModuleLocalIdent,
                    },
                    "less-loader"
                  ),
                },
    3.重新启动项目,创建less文件并引入

    .about{
      .container{
        font-size: 22px;
        p{
          color: red;
        }
      }
      }
    样式生效,说明less配置成功

    四、配置sass
    通过create-react-app创建的react项目,其实是默认已经配置好sass的,所以我们先尝试在项目中引入sass文件

    会发生如下报错:

    解决方法:执行下面的命令

    npm i sass -s
     然后重新运行即可,样式生效

    五、配置px2rem自适应
    第一种方式:暴露config
    1. 安装lib-flexible、pxtorem,postcss

    npm i lib-flexible postcss-pxtorem postcss postcss-loader postcss-preset-env postcss-flexbugs-fixes -s
    2.配置config/webpack.config.js,在config目录下找到webpack.config.js文件,加入

    const px2rem = require('postcss-pxtorem');


    3. 然后再下面代码中加入下面这行

    px2rem({
           rootValue: 75,
           propWhiteList: [],
           minPixelValue: 2,
           exclude: /node_modules/i,
           unitPrecision: 5,
           propList: ['*']
    }), //设计稿根据750px(iphone6)


     也可以使用一下代码覆盖loader

          {
            // Options for PostCSS as we reference these options twice
            // Adds vendor prefixing based on your specified browser support in
            // package.json
            loader: require.resolve('postcss-loader'),
            options: {
              postcssOptions: {
                // Necessary for external CSS imports to work
                // https://github.com/facebook/create-react-app/issues/2677
                ident: 'postcss',
                config: false,
                plugins: !useTailwind
                  ? [
                      'postcss-nested',
                      'postcss-flexbugs-fixes',
                      [
                        'postcss-preset-env',
                        {
                          autoprefixer: {
                            flexbox: 'no-2009',
                          },
                          stage: 3
                        },
                      ],
                      // Adds PostCSS Normalize as the reset css with default options,
                      // so that it honors browserslist config in package.json
                      // which in turn let's users customize the target behavior as per their needs.
                      px2rem({
                        rootValue: 37.5,
                        selectorBlackList  : [], //过滤
                        propList   : ['*'],
                        minPixelValue: 2,
                        exclude: /node_modules/i
                      }), //设计稿根据750px(iphone6)
                    'postcss-normalize',
                    ]
                  : [
                      'tailwindcss',
                      'postcss-flexbugs-fixes',
                      [
                        'postcss-preset-env',
                        {
                          autoprefixer: {
                            flexbox: 'no-2009',
                          },
                          stage: 3,
                        },
                      ],
                      px2rem({
                        rootValue: 37.5,
                        selectorBlackList  : [], //过滤
                        propList   : ['*'],
                        minPixelValue: 2,
                        exclude: /node_modules/i
                        }), //设计稿根据750px(iphone6)
                    ],
              },
              sourceMap: isEnvProduction ? shouldUseSourceMap : isEnvDevelopment,
            },
          },
    4. src目录下找到index入口文件,在文件上面加入

    import 'lib-flexible'; 

    5. 找到public/index.html文件,加入如下代码:

    <meta content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"
            name="viewport"/>

    6. 重新运行项目,一般就可以看到px转rem了。

    .contact {
      .container {
        font-size: 36px;
     
        .center {
          color: blue;
        }
        p {
          font-size: 24px;
        }
        button {
          width: 100px;
          height: 45px;
          background: #ccc;
          color: #fff;
        }
      }
    }
     第二种方式:直接在config文件中修改
    1.找到文件路径:node_modules\react-scripts\config\webpack.config.js

     2.配置webpack.config.js,加入如下代码:

    const px2rem = require('postcss-pxtorem');


    3. 然后再下面代码中加入下面这行

    px2rem({
           rootValue: 75,
           propWhiteList: [],
           minPixelValue: 2,
           exclude: /node_modules/i,
           unitPrecision: 5,
           propList: ['*']
    }), //设计稿根据750px(iphone6)


    也可以使用一下代码覆盖loader

          {
            // Options for PostCSS as we reference these options twice
            // Adds vendor prefixing based on your specified browser support in
            // package.json
            loader: require.resolve('postcss-loader'),
            options: {
              postcssOptions: {
                // Necessary for external CSS imports to work
                // https://github.com/facebook/create-react-app/issues/2677
                ident: 'postcss',
                config: false,
                plugins: !useTailwind
                  ? [
                      'postcss-nested',
                      'postcss-flexbugs-fixes',
                      [
                        'postcss-preset-env',
                        {
                          autoprefixer: {
                            flexbox: 'no-2009',
                          },
                          stage: 3
                        },
                      ],
                      // Adds PostCSS Normalize as the reset css with default options,
                      // so that it honors browserslist config in package.json
                      // which in turn let's users customize the target behavior as per their needs.
                      px2rem({
                        rootValue: 37.5,
                        selectorBlackList  : [], //过滤
                        propList   : ['*'],
                        minPixelValue: 2,
                        exclude: /node_modules/i
                      }), //设计稿根据750px(iphone6)
                    'postcss-normalize',
                    ]
                  : [
                      'tailwindcss',
                      'postcss-flexbugs-fixes',
                      [
                        'postcss-preset-env',
                        {
                          autoprefixer: {
                            flexbox: 'no-2009',
                          },
                          stage: 3,
                        },
                      ],
                      px2rem({
                        rootValue: 37.5,
                        selectorBlackList  : [], //过滤
                        propList   : ['*'],
                        minPixelValue: 2,
                        exclude: /node_modules/i
                        }), //设计稿根据750px(iphone6)
                    ],
              },
              sourceMap: isEnvProduction ? shouldUseSourceMap : isEnvDevelopment,
            },
          },
    4. src目录下找到index入口文件,在文件上面加入

    import 'lib-flexible'; 
     
    5. 找到public/index.html文件,加入如下代码:

    <meta content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"
            name="viewport"/>

    6. 重新运行项目,一般就可以看到px转rem了。

    存在问题:当设备宽度超过540后,样式就固定在540不再改变了

    解决方法:在node-modules => lib-flexible => flexible.js中找到refreshRem修改其中的width值为设计稿宽度即可

    六、配置axios和反向代理
    1. 安装axios 和 http-proxy-middleware(后面反向代理会用到)

    npm i axios http-proxy-middleware -s
    2. 在src目录下创建api文件夹,然后创建 index.ts 和 request.ts 文件

    //index.ts
     
    import {Service} from './request';
    //获取汽车列表
    export function getCarList(config: { page: string; }){
        const params = new URLSearchParams()
        params.append('page',config.page);
     
        return Service({
            url:'./api/getCarList',
            data:params
        })
    }
     
     
    //request.ts
     
    import axios from "axios";
     
    declare module 'axios' {
         export interface AxiosResponse<T = any> extends Promise<T> {}
     }
     
    export const Service = axios.create({
      timeout: 3000, //延迟时间
      method: "POST",
      headers: {
        "pc-token": "4a82b23dbbf3b23fd8aa291076e660ec",
        "content-Type": "application/x-www-form-urlencoded",
      },
    });
     
    //请求拦截
    Service.interceptors.request.use((config) => config);
     
    //响应拦截
    Service.interceptors.response.use(
      (response) => response.data,
      (err) => console.log(err)
    );
    3. 配置代理,可以访问到后台的服务器地址

    在src文件夹中创建setupProxy.js内容配置如下

    const {createProxyMiddleware} = require('http-proxy-middleware');
     
    module.exports = function(app) {
      app.use('/api', createProxyMiddleware({ 
        target: 'http://www.ibugthree.com/oldcar/',//后台服务器地址
        changeOrigin: true,
        pathRewrite: {
        '^/api': '',
        },}))
    };
    在新版本中已经默认设置代理的文件夹名为setupProxy.js

      到这里所有配置就基本完成,在组件中调用即可

    import React, { Component } from "react";
    import "./contact.scss";
    //导入要使用的接口
    import { getCarList } from "../api/index";
     
    export default class Contact extends Component {
      // 定义方法
      getList() {
        getCarList({ page: "1" }).then((res) => console.log(res));
      }
      render() {
        return (
          <div className="contact">
            <div className="container">
              <h3 className="center"> Contact页面</h3>
              <p>欢迎来到联系我们页面!</p>
              {/* 点击事件调用 */}
              <button onClick={this.getList}>获取数据</button>
            </div>
          </div>
        );
      }
    }


     

     七、配置redux
    1. 安装redux

    npm i redux react-redux -s
    2.在src路径下创建store文件夹,文件假中创建两个文件action.ts和index.ts两个文件

    action中定义type,然后返回设置状态的type和函数

    export const SET_AGE = "set_age";
    export const SET_NAME = "set_name";
     
    export const setAge = function (n: number) {
      return {
        type: SET_AGE,
        n: n,
      };
    };
    export const setName = function (name: string) {
      return {
        type: SET_NAME,
        name: name,
      };
    };
    index文件中取出redux中的createStore,以及action中的type,最后需要将createStore返回出去,并且需要传递一个函数,定义这个函数时有两个参数,一个是状态,一个是action,使用switch判断action中的type,当所有条件都不成立时,将所有的状态返回,有条件成立时,就通过扩展运算符将state展开,并且对age进行操作(...state);

    import { createStore } from "redux";
    import { SET_AGE, SET_NAME } from "./action";
     
    interface User {
      name: string;
      age: number;
    }
     
    const common: User = {
      name: "张三123",
      age: 18,
    };
     
    function user(state = common, action: any) {
      switch (action.type) {
        case SET_AGE:
          return {
            ...state,
            age: state.age + action.n,
          };
        case SET_NAME:
          return {
            ...state,
            name: action.name,
          };
        default:
          return state;
      }
    }
     
    export default createStore(user);
    3. 在主入口文件index.tsx中进行redux的连接和store的引用

    import React from "react";
    import ReactDOM from "react-dom";
    import "./index.css";
    import App from "./App";
    import reportWebVitals from "./reportWebVitals";
    // 引入路由组件
    import { BrowserRouter as Router } from "react-router-dom";
    // 引入移动端自适应
    import "lib-flexible";
    //引入rootReducer组件
    import { Provider } from "react-redux";
    import store from "./store";
     
    ReactDOM.render(
      <React.StrictMode>
        {/* provider组件将所有的组件包裹起来,用绑定属性的形式绑定store到组件中 */}
        <Provider store={store}>
          <Router>
            <App />
          </Router>
        </Provider>
      </React.StrictMode>,
      document.getElementById("root")
    );
     
    reportWebVitals();
    4. 在App中进行配置

    import React from "react";
    // 引入路由导航栏
    import Navbar from "./views/Navbar";
    // 引入routes组件
    import routes from "./routes";
    // 引入包管理工具
    import { renderRoutes, RouteConfig } from "react-router-config";
    import "./App.css";
    // 引入connect连接组件
    import {connect} from "react-redux"
     
     
    function App() {
      return (
        <div className="App">
          <Navbar />
          {/* 设置routes的类型为RouteConfig[],否则报错 */}
          {renderRoutes(routes as RouteConfig[])}
        </div>
      );
    }
     
    //进行连接
    export default connect((props,state)=>Object.assign({},props,state),{})(App);
    5.组件中使用redux

        1. 引入connect和action中的方法

        2. 定义props和state类型

        3. 修改render中的html结构,定义属性和方法调用

        4. connect连接属性并导出

    import React, { Component } from "react";
    import "./about.less";
    // redux
    import { connect } from "react-redux";
    import { setName, setAge } from "../store/action";
     
    interface Props {
      setAge: Function;
      setName: Function;
      age: number;
      name: string;
    }
     
    interface State {}
     
    class About extends Component<Props,State> {
      refs:any = React.createRef()
      // eslint-disable-next-line @typescript-eslint/no-useless-constructor
      constructor(props:Props){
        super(props)
      }
      changeAge(){
        this.props.setAge(1);
        console.log(this.props);
      }
      changeName(){
        let name:number = this.refs.value
        this.props.setName(name)
        console.log(this.refs);
        this.refs.value = ''
      }
      render() {
        return (
          <div className="about">
            <div className="container">
              <h3 className="center"> About页面</h3>
              <p>欢迎来到关于我们页面!</p>
            </div>
            <div>
              <p>名字是:{this.props.name}</p>
              <input ref={(input: HTMLInputElement) => this.refs = input}  type="text" /> 
              <button onClick={this.changeName.bind(this)}>修改姓名</button>
              <p>年龄是:{this.props.age}</p> 
              <button onClick={this.changeAge.bind(this)}>修改年龄</button>
            </div>
          </div>
        );
      }
    }
     
    export default connect((props,state)=>Object.assign({},props,state),{
      setAge,setName
    })(About);


    八、配置别名@
    一、暴露方法
    1.打开 config 文件夹下的 webpack.config.js 文件

     2.搜索 alias

     3.参照如下格式,设置路径别名

    alias: {
            // Support React Native Web
            // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
            'react-native': 'react-native-web',
            // Allows for better profiling with ReactDevTools
            ...(isEnvProductionProfile && {
              'react-dom$': 'react-dom/profiling',
              'scheduler/tracing': 'scheduler/tracing-profiling',
            }),
            ...(modules.webpackAliases || {}),
            // 文件路径别名
            '@': path.resolve(__dirname, '../src'),
            '@view': path.resolve(__dirname, '../src/view'),
          },
    二、直接在config文件中修改
    1.找到文件路径:node_modules\react-scripts\config\webpack.config.js

    其他步骤同上!!

    需要特别注意的是: webpack配置进行改动后,都需要重新启动项目,不然不生效

    九、配置antd-mobile
    1.在项目中安装antd-mobile 使用

    npm install antd-mobile
    //或
    yarn add antd-mobile
    2.在项目中Home.tsx文件中导入要使用的组件

    import React, { Component } from "react";
    //使用组件直接在组件中进行使用即可
    import { Button } from 'antd-mobile';
     
    export default class Home extends Component {
      render() {
        return (
          <div className="home">
            <div className="container">
              <h3 className="center"> Home页面</h3>
              <p>欢迎来到首页</p>
              <Button color='primary'>按钮</Button>
            </div>
          </div>
        );
      }
    }
    完成之后,你就能在react项目使用antd-mobile的样式文件进行构建自己的页面了

    至此,react项目创建和配置完成

    如有问题,请及时沟通
     

    展开全文
  • 创建React应用 :heavy_plus_sign: TypeScript + Tailwind CSS TLDR 点击“使用此模板” clone到你的 :laptop_computer: cd进入新目录 :open_file_folder: npm i要建立所有的'node_modules' npm start 在VS ...
  • TSLint挂钩规则 一个TSLint规则,用于为React挂钩强制实施。 该规则基于的。产品特点在潜在条件分支内检测使用React钩子: 如果陈述短路条件表达式( && , || ) 三元表达式循环( while , for , do ... while )...
  • 1.安装基于 promise 的网络请求库axios npm install axios 2.axios封装与使用 2.1 request.js对axios的封装 import axios from 'axios'; import {baseInfo} from "../common/config"; import {getToken,removeToken...

    踩 坑 不 易 , 还 希 望 各 位 大 佬 支 持 一 下 \textcolor{gray}{踩坑不易,还希望各位大佬支持一下}

    📃 个 人 主 页 : \textcolor{green}{个人主页:} 沉默小管

    📃 个 人 网 站 : \textcolor{green}{个人网站:} 沉默小管

    🔥 技 术 交 流 Q Q 群 : : 837051545 \textcolor{green}{技术交流QQ群::837051545} QQ:837051545

    👍 点 赞 , 你 的 认 可 是 我 创 作 的 动 力 ! \textcolor{green}{点赞,你的认可是我创作的动力!}

    ⭐️ 收 藏 , 你 的 青 睐 是 我 努 力 的 方 向 ! \textcolor{green}{收藏,你的青睐是我努力的方向!}

    ✏️ 评 论 , 你 的 意 见 是 我 进 步 的 财 富 ! \textcolor{green}{评论,你的意见是我进步的财富!}

    如果有不懂可以留言,我看到了应该会回复
    如有错误,请多多指教

    1.安装基于 promise 的网络请求库axios

    npm install axios
    

    2.axios封装与使用

    2.1 request.js对axios的封装

    import axios from 'axios';
    import {baseInfo} from "../common/config";
    import {getToken,removeToken,removeUsername,removeUserId} from "../common/storage";
    let baseURL = baseInfo.baseURL;
    let baseURLStorage = baseInfo.baseURLStorage;
    export {baseURL,baseURLStorage};
    export function requestAdmin(config){
      let Token = getToken();
      if(Token){
        config.headers={
          ...config.headers,
          'Token' : `${Token}`,
          'Authorization' : `token`,
        }
      }
      //使用axios创建公共的配置信息,不需要重复创建
      const instance = axios.create({
        baseURL:baseInfo.baseAdminUrl,
        headers:{...config.headers},
        timeout:100000
      });
      // axios请求拦截器 请求
      instance.interceptors.request.use(config=>{return config;},err=>{console.log(err);})
      // axios响应拦截器 数据返回
      instance.interceptors.response.use(res=>{
        let {code,message} = res.data;
        //判断用户登录的token是否过期
        if(code === 1002){
          res.message = 'token过期,请重新登录';
          res.code = 1002;
          setTimeout(_ =>{
            removeToken();
            removeUsername();
            removeUserId();
          },1000);
        }
        if(message === "Expired token"){
          res.message = 'token过期,请重新登录';
          res.code = 1002;
          setTimeout(_ =>{
            removeToken();
            removeUsername();
            removeUserId();
          },1000);
        }
        return res;
      },err=>{
        console.log(err);
      })
      return instance(config);
    }
    

    2.2 network/v1/login/index.tsx对axios封装的使用

    index.tsx

    //引用axios封装函数
    import {requestAdmin} from "@/network/request";
    
    /**
     * 请求登录
     * @param data
     */
    export function requestLogin(data:any){
        return requestAdmin({
            url:"/login/login",
            data,
            method:"post"
        })
    }
    

    2.3 views/v1/login/index.tsx页面视图中的调用

    index.tsx

    //引入network的网络请求接口
    import { requestLogin } from "@/network/v1/login/index"
    interface InitProps{}
    const Login:FC<InitProps> = (props:InitProps)=>{
    const onFinish = (values: any) => {
            let data = new URLSearchParams();
            data.append('username', "测试数据");
            data.append('password', "测试数据");
            requestLogin(data).then((res: resInterface) => {
                let { code, data,message } = res.data;
                if (code === 200) {
                    showSuccess('登录成功');
                    setToken(data.token);
                    setUserId(data.id);
                    setTimeout(_ =>{
                        setLoading(false)
                    },1000)
                } else {
                    showError(`${message}`);
                    setLoading(false)
                }
            }).catch((err:any) => {
                console.log(err);
            })
        };
    	return (
            <React.Fragment>
    		<Button onClick={onFinish}>&nbsp;&nbsp;</Button>
    		</React.Fragment>
            )
    }
    
    export default Login;
    

    欢迎加入前端全栈开发交流圈一起吹水聊天学习交流qq群:837051545

    个人网站:沉默博客
    如有错误,请多多指教。
    如对你有帮助,给个赞吧。

    展开全文
  • React挂钩 React + Hooks + Ts最佳实践
  • 记录异步获取菜单(角色控制)权限控制
  • TS + ESlint互动 如何将ESLint添加到项目 安装仅开发包: npm i --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin 创建初始eslint配置文件 eslint --init (可选)将linting命令...
  • 组件介绍

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,546
精华内容 19,418
关键字:

react加ts