添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
// Component<约定属性, 约定状态> export default class TsClass extends Component < any , JState > { state = { name : 'react' , list : [ ] myref = React . createRef < HTMLInputElement > ( ) render ( ) { return ( < input ref = { this . myref } / > < button onClick = { ( ) => { this . setState ( { // 类型断言 list : [ ... this . state . list , ( this . myref . current as HTMLInputElement ) . value ] , // 也可写成.?的形式代表有可能为空 // list: [...this.state.list,this.myref.current?.value], } ) ; ( this . myref . current as HTMLInputElement ) . value = '' } } > click < / button > this . state . list . map ( item => < li key = { item } > { item } < / li > < / div >

可以看到我们这里用 as 来进行类型断言,做了一个简单的 todolist ,效果:
在这里插入图片描述

1.3 父子组件

import React, { Component } from 'react'
export default class TsClass extends Component {
  render() {
    return (
        <Child name="'asdf'"></Child>
      </div>
interface IProps {
  name: string
class Child extends Component<IProps,any> {
  render() {
    return (
      <div>Child - {this.props.name}</div>

可以看到父子组件这里就是约定属性,在父组件中使用子组件约定好的状态与名称及类型。

二、ts在函数组件应用

2.1 普通应用

import React, { useState } from 'react'
export default function TsFunction() {
  const [name, setName] = useState('tsFunction')
  return (
        app-{name.substring(0,1).toUpperCase() + name.substring(1)}
        <button onClick={() => {
            setName(100)
        }}>click</button>
    </div>

在这里插入图片描述
我们可以看到在函数组件中已经隐式的提醒了类型出错了,显型去写的话可以看到我们在useState的时候去规定类型:

const [name, setName] = useState<string>('tsFunction')

2.2 ref引用

import { useRef, useState } from 'react'
export default function TsFunction() {
  const mytext = useRef<HTMLInputElement>(null)
  const [list, setlist] = useState<string[]>([])
  return (
        <input ref={mytext} />
        <button onClick={() => {
            // console.log((mytext.current as HTMLInputElement).value)
            // console.log(mytext.current?.value)
            setlist([...list, (mytext.current as HTMLInputElement).value]);
            (mytext.current as HTMLInputElement).value = '';
        }}>click</button>
            list.map(item => 
                <li key={item}>{item}</li>
    </div>

2.3 父子组件

import React from 'react'
export default function TsFunction() {
  return (
    <div>TsFunction
        <Child name="aaa"/>
    </div>
interface JProps {
    name: string
// 写法一
function Child(props: JProps) {
    return <div>child-{props.name}</div>
// 写法二
// const Child:React.FC<JProps> = (props) => {
//     return <div>child-{props.name}</div>
 

在学习React + Typescript的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

原文:https://medium.com/js-dojo/vue-js-functional-components-what-why-and-when-439cfaa08713要义:如... 在 TypeScript 不再需要导入 Props 来限制 props 的型,而是使用 type 来限制。自定义函数组件 Info 的型是一个带有泛型的函数,我们需要把 Props 传入到泛型。并将放进参数列表,对从父组件接收到的 props 解构赋值。可以利用 TypeScript型推断进一步简化。可以用对 props 设置默认值。设置默认值的方式也可以通过 js 的语法进一步简化。当解构赋值没有从父组件传递过来的 props 上得到age的值时,对其赋默认值。 在我学习typescript时,想在react使用typescript写代码,从头开始的时候是懵逼的,因为官方文档并没有使用typescript的教程,多是自己在网上查,自己看定义摸索 所以今天把我用过的,总结归纳一下,希望能帮助到同样在摸索的同学 以下代码react版本为16.13.1,在create-react-app官方typescript模版无报错 型简述 一些React的内置React.ReactElement —— 使用React.createElement创建的, typescript1、typescript介绍2、特点3、 说起typescript你是不想到了javascript呢,没错,它们确实是有关系的,具体是什么,往下看! 1、typescript介绍 学了这么久的javascript,相信你已经知道了javascript是一门弱型语言。 强型语言就是声明变量的同时限制数据型,而弱型语言则相反,对于数据型的限制并不那么严格。 比如你定义了一个变量,但是赋值的时候可以赋任何型的数据,而强型就比较严格了,是什么型就必须严格匹配。 typescrip 函数组件React 16.8的新功能,可以让你不写class就使用React的特性。函数组件的优势在于是无状态组件,根据接收的参数进行渲染,之前我们使用mobx也是为了让class component变得纯净。同时,函数组件就没有组件生命周期的概念了,因此在渲染过程可以减少一些子组件的渲染。这篇文章简单讲了一下两者的区别。 我这篇文章主要会讲怎么样将class component改写成functional component。涉及的内容还是React、mobx。 当然一些重复的东西我这边就 import React, { Component } from "react"; export default class Clock extends Component { constructor(props) { super(props); this.state = { 型缩小的英文是 Type Narrowing; 我们可以通过似于 typeof padding === "number" 的判断语句,来改变TypeScript的执行路径; 在给定的执行路径,我们可以缩小比声明时更小的型,这个过程称之为 缩小; 而我们编写的 typeof padding === "number 可以称之为 型保护(type guards); 常见的型保护有如下几种: ptypeof 平等缩小(比如===、!==) ...