我想在辅助函数中操作 React 类组件中存在的状态。我想在 Typescript 中实现相同的目标

Posted

技术标签:

【中文标题】我想在辅助函数中操作 React 类组件中存在的状态。我想在 Typescript 中实现相同的目标【英文标题】:I want to manipulate the state present in React class component in a helper function. I want to achieve the same in Typescript 【发布时间】:2020-06-02 01:55:40 【问题描述】:

我想在 typescript 中实现下面的 javascript 代码。我有一个类组件,其状态调用外部辅助方法进行修改。我需要调用 helper.ts 文件中存在的 checkAuthentication 方法并传递“this”的上下文,以及访问我的类组件中的 checkAuthentication 方法。

类组件:Home.tsx

import  checkAuthentication  from './routes/login/helper';

class Home extends React.Component<any> 
  constructor(props: any) 
    super(props);
    console.log(props);
    this.state =  authenticated: null ;
    this.checkAuthentication = checkAuthentication.bind(this);    
  
  async componentDidMount() 
    this.checkAuthentication();
  
  render() 
    return (      
        <></>         
    )
  

Helper.ts 文件包含修改 Home.tsx 文件中存在的状态的 checkAuthentication 方法

async function checkAuthentication() 
  const authenticated = await this.props.auth.isAuthenticated();
  if (authenticated !== this.state.authenticated) 
    if (authenticated && !this.state.userinfo) 
      const userinfo = await this.props.auth.getUser();
      this.setState( authenticated);
     else 
      this.setState( authenticated );
    
  

【问题讨论】:

这是如何在 JavaScript 而不是在 TypeScript 中工作的? TypeScript 是 JavaScript 的类型化超集。你是说这在 TypeScript 中不适合你吗?如果它在 JS 中工作,那么它应该可以工作。 【参考方案1】:

如果它不能开箱即用(如果它在 JS 中有效,那么它应该可以,除非它是需要更改 no-implicit-this 或类似内容的类型检查错误),那么您可以执行以下操作:

function checkAuthentication(that: React.Component<any>) 
  return async function () 
    const authenticated = await that.props.auth.isAuthenticated();
    if (authenticated !== that.state.authenticated) 
      if (authenticated && !that.state.userinfo) 
        const userinfo = await that.props.auth.getUser();
        that.setState( authenticated);
       else 
        that.setState( authenticated );
      
    
  

在你的课堂上:

this.checkAuthentication = checkAuthentication(this);    

【讨论】:

以上是关于我想在辅助函数中操作 React 类组件中存在的状态。我想在 Typescript 中实现相同的目标的主要内容,如果未能解决你的问题,请参考以下文章

React-从“同级”组件调用函数

在 React Native 中的组件挂载之前调用带有参数的辅助函数

React 从包装器组件调用函数

React 类组件与函数组件 [重复]

在 useEffect() 钩子中从父级传递的子级调用函数,React

react——生命周期