React 入门(4)React+TypeScript
序言
设置淘宝镜像
npm config get cache
npm config get prefix
npm config get registry
npm config set registry https://registry.npmjs.org
npm config set registry https://registry.npm.taobao.org
npm
如果没有create-react-app命令行脚手架,可以先下载个
npm install -g create-react-app
然后我们使用其创建一个typescript项目
create-react-app my-app --tempalte typescript
进后项目,启动
npm start
yarn
注意:建议不要放在node的文件夹里,将其放在另一个文件夹,否则会影响node安装的全局命令使用。
yarn config set global-folder "D:\Web\Node\yarn\global"
yarn config set cache-folder "D:\Web\Node\yarn\cache"
创建项目
yarn create react-app react-typescript-app --typescript
yarn
yarn start
集成
less
https://www.cnblogs.com/lyzw-Y/p/11566631.html
webpack
yarn add webpack
ant design
yarn add antd
Redux
yarn add redux
yarn add react-redux
yarn add redux-thunk yarn add redux-saga
yarn add redux-logger
yarn add react-router-dom
DvaJS
Umi
全局安装umi,版本是2.0.0或以上
yarn global add umi
yarn create umi
umi block list
https://pro.ant.design/docs/block
创建页面
umi g page index
umi g page users
启动本地服务器
umi dev
概念
useState
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import React, { useState } from 'react' import './App.css' export default function App() { const [count, setCount] = useState(0); const [name, setName] = useState('Star'); // 调用三次setCount便于查看更新队列的情况 const countPlusThree = () => { setCount(count+1); setCount(count+2); setCount(count+3); } return ( <div className='App'> <p>{name} Has Clicked <strong>{count}</strong> Times</p> <button onClick={countPlusThree}>Click *3</button> </div> ) } 复制代码
const [count, setCount] = useState(0);
const [count, setCount] = useState<number>(0)
useEffect
React Hooks+Umi+TypeScript+Dva开发体验
组件 & Props
组件,从概念上类似于 JavaScript 函数。它接受任意的入参(即 “props”),并返回用于描述页面展示内容的 React 元素。
函数组件与 class 组件
定义组件最简单的方式就是编写 JavaScript 函数:
function Welcome(props) { return <h1>Hello, {props.name}</h1>; } export default RoomItem;
该函数是一个有效的 React 组件,因为它接收唯一带有数据的 “props”(代表属性)对象与并返回一个 React 元素。这类组件被称为“函数组件”,因为它本质上就是 JavaScript 函数。
你同时还可以使用 ES6 的 class 来定义组件:
class Welcome extends React.Component { render() { return <h1>Hello, {this.props.name}</h1>; } }
上述两个组件在 React 里是等效的。
展开运算符{...props}
解决属性过多,一个个书写麻烦的问题。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
const SampleModel: React.FC<{}> = () =>{ //React.FC<>为typescript使用的泛型 const [createModalVisible, handleModalVisible] = useState<boolean>(false); return{ {/** 触发模态框**/} <Button style={{fontSize:'25px'}} onClick={()=>handleModalVisible(true)} >样例</Button> {/** 模态框组件**/} <Model onCancel={() => handleModalVisible(false)} ModalVisible={createModalVisible} /> }
React.Fragment 组件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Columns extends React.Component { render() { return ( <React.Fragment> <td>Hello</td> <td>World</td> </React.Fragment> ); } }
生成器函数
yield关键字:暂停
组件类引入了复杂的编程模式,比如 render props 和高阶组件。
React 团队希望,组件不要变成复杂的容器,最好只是数据流的管道。开发者根据需要,组合管道即可。 组件的最佳写法应该是函数,而不是类。
function Welcome(props) { return <h1>Hello, {props.name}</h1>; }
但是,这种写法有重大限制,必须是纯函数,不能包含状态,也不支持生命周期方法,因此无法取代类。
React Hooks 的设计目的,就是加强版函数组件,完全不使用"类",就能写出一个全功能的组件。
资料
Redux