【问题标题】:How to set state for individual state variable in react + typescript?如何在 react + typescript 中为单个状态变量设置状态?
【发布时间】:2017-06-16 21:35:58
【问题描述】:

当我点击按钮时,“isLoading”设置为true,页面中出现加载gif,这里处理简单的点击功能;

private clickFunction(e): void {
    this.state.isLoading=true; ..

所以我希望这个加载 gif 出现在页面中;

<div style={{"display":this.state.isLoading?"block":"none"}}><i className="fa fa-spinner fa-spin"></i></div>  

但它不起作用..这里有什么问题?因为如果 isLoading 属性的初始值设置为 true,则 gif 似乎在 plageload 上,所以我认为状态不更新渲染还是?

已编辑: 当我尝试仅更新状态 ts 编译器的一个属性时,会抛出此异常; 这里穿什么?

export interface IWebPartState {
  status: string;
  Name: string;
  isLoading:boolean;
}
export default class Contact extends React.Component<IContactProperties, IWebPartState> { ...

【问题讨论】:

  • this.state.isLoading=true 是错误的。改为使用setState
  • @jose920405 如果有很多属性在哪里?我还必须设置其他人吗?如何编辑状态的单个属性?
  • 你在使用 reactjs 和 typescript 吗?
  • @HardikModha 是 ts 2.1.4

标签: reactjs typescript


【解决方案1】:

这似乎已经改变了...

如果您查看 React 类型定义(index.d.t,React 16),您会看到 Typescript 中的 setState 方法签名是:

class Component<P, S> {
...
  setState<K extends keyof S>(state: Pick<S, K>, callback?: () => any): void;
...
}

S是我们的组件状态,在你的情况下是IWebPartState

查看this SO question to understand what it means,但简而言之:您不必将接口属性设为可选,但您可以只将其中的一部分传递给setState

【讨论】:

    【解决方案2】:

    您以错误的方式设置状态, 而不是this.state.isLoading=true,您应该使用setState 设置状态,如下所示,

    this.setState({
        isLoading: true
    });
    

    详细了解 state here 和 setState here

    编辑:当您将 reactjs 与 typescript 一起使用时,您需要在类型界面中将属性设为可选,您可以使用 ? 来做到这一点。在可选属性部分阅读更多信息here

    interface IGifLoadingState {
        isLoading?: boolean;
        status?: string;
    }
    

    在声明属性可选后,打字稿将允许您在状态中设置任何单独的属性。

    【讨论】:

    • 但是我在状态中有很多属性,我认为设置状态的单个属性是不可能的,是吗?
    • @TyForHelpDude setState 只会更新您传递给它的属性。
    • 是的,您可以传递要设置的单个属性。
    • @TyForHelpDude Here 我为你创建了一个小例子。您需要打开浏览器控制台才能查看结果。
    • @HardikModha ty 回答和示例实际上您完成了帖子来源的部分,但仍然对设置状态的单个属性感到困惑。你能检查一下你的帖子吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    相关资源
    最近更新 更多