【问题标题】:what does React setState() return?React setState() 返回什么?
【发布时间】:2018-05-12 17:51:59
【问题描述】:

我在三元组中使用this.setState()inside 并试图找出它返回的内容。该文档没有提供任何关于它返回什么的信息。

【问题讨论】:

  • 我认为它不会返回任何东西。它是一个二传手
  • 您是否试图回读状态中设置的内容并根据它做出决定?如果是,您应该在回调函数中移动该逻辑并将其作为第二个参数发送到setStatesetState 函数安排更新,状态既不会立即修改,也不会从调用中作为值返回。 状态更新后采取行动的正确方法是通过回调作为第二个参数。

标签: javascript reactjs


【解决方案1】:

setState() 返回未定义, 但如果你想“破解”它并返回 true

只需使用:

!!!setState({...}) //returns true

【讨论】:

    【解决方案2】:

    如前所述,

    我认为它不会返回任何东西。它是一个二传手。

    您可以参考setState docs 了解它的作用。

    现在回答你的问题,因为 react 与 Typescript 密切相关,以下代码来自 react 的 index.d.ts 文件。可以找到文件here,可以查看定义here

    setState<K extends keyof S>(f: (prevState: Readonly<S>, props: P) => Pick<S, K>, callback?: () => any): void;
    setState<K extends keyof S>(state: Pick<S, K>, callback?: () => any): void;
    

    如您所见,两个定义具有相同的返回类型:void。这是因为,首先,它是一个 setter 函数。其次,在大多数情况下,setState 会触发重新渲染。所以你将无能为力。

    如果你必须在 setState 之后做一些处理,你可以传递一个回调作为第二个参数。

    【讨论】:

    • 根据类型定义,setState返回voidgithub.com/DefinitelyTyped/DefinitelyTyped/blob/…
    • 答案就是这样。正确的?它是一个setter函数。它接受一个值并设置它。无需退货
    • 重要的是要提到,如果您使用钩子版本,例如 useState() 和 useReducer(),则不能将回调作为第二个参数传递。状态更改后的任何处理都应该放在 useEffect() 调用中。
    • @timarcosdias 虽然你是对的,但帖子是关于setState。有了钩子,它就完全不同了
    【解决方案3】:

    React 的 setState() 函数缺少明确的 return 语句,因此将返回 undefined。如果您需要来自setState() 的返回值,您应该使用!!,它将强制它返回false。希望有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 2021-06-19
      • 2019-04-27
      • 2018-08-17
      • 2016-04-21
      • 1970-01-01
      相关资源
      最近更新 更多