加载父状态数组时显示微调框

时间:2019-03-06 22:34:05

标签: reactjs typescript

我正在为我的应用程序使用带有打字稿的React。现在,我在顶层“ app.tsx”中拥有一种称为对象的状态,该状态是对象的数组。我通过几个子组件传递了一个功能,该功能是在顶级应用程序级别定义的getObjects。如果已定义,此函数将返回状态object [],否则将调用异步函数以加载对象。

  

我想做的是在此状态object []在应用程序中仍未定义的同时在子组件中显示一个加载微调器。

我知道,如果要在我的子组件中将object []加载为本地状态,则可以轻松完成此操作。应用中的状态加载完成后,有什么方法可以在子级调用回调?我看到的唯一方法是将object []本身传递给子组件,但是我的知识仍然非常有限。谢谢,感谢您的帮助。

修改:
我的孙子组件中确实需要getObjects函数。我已经简化了结构。实际上,在app对象中的情况是Dictionary类型,它用作键-值对,其数字id对应于特定的对象数组。在加载应用程序时,会选择一个键-值对,并在用户可以继续使用该应用程序的同时异步加载。它在后端加载了这些初始子组件,因此不需要微调器。

在大孙子组件中,如果用户选择,则需要在使用API​​填充字典的object []部分的同时将另一个id加载到字典中。加载字典的这一部分后,顶层应用程序层中的getObjects调用将返回我的曾孙中转换后的对象数组,以供选择。现在发生的事情是,在异步功能完成之前,选择框一直为空,然后按预期填充。我想做的是在此操作完成后,在大孙子中显示一个微调框,而不是选择框。

由于结构是字典,从技术上讲,一次可以尝试加载该字典的两个值,所以我不确定是否要尝试传递并使用布尔值进行此加载。

我不愿意遍历整个字典本身,并等待加载特定的字典键值对,因为这似乎是一种反模式。完成我想做的最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

在您的子组件中有条件地渲染微调器和对象内容。

{
yourObjectFromParent 
? (<>Your object contents here</>)
: (<LoaderComponent/>)
}

OR

您可以尝试在父级中设置一个名为loading = true的状态,并在加载对象时将其设置为false。您应该将此加载状态作为道具传递给子组件。如果是这样,您的代码将是这样。也可以使用redux之类的全局状态处理程序来实现。

{
props.loading 
? (<>Your object contents here</>)
: (<LoaderComponent/>)
}

答案 1 :(得分:0)

这将显示微调框,直到加载完成。

class MyComponent extends Component {
  state = {
        isLoading: true,
        data: null
  }

  componentDidMount() {
    fetchSomeData(url)
      .then(data => {
        this.setState({isLoading: false, data: data});
      })
    }

    render() {
        const {isLoading, data} = this.state;
        return isLoading ? <ChildComponent data={data} /> : <Spinner />
    }
}