简体   繁体   English

反应中每个组件的旋转器

[英]spinner for each component in react

What is the best practice and efficient way for implement spinner component for whole apps ?为整个应用程序实现微调组件的最佳实践和有效方法是什么?

My sample code :我的示例代码:

render() {
  if (this.state.loading)
    return (
      <Spinner/>
    )

  return (
    <div className="container">
  )
}

i want avoid to rewrite the same logic checking loading state for each component.我想避免为每个组件重写相同的逻辑检查加载状态。 TIA. TIA。

Simply apply a ternary:只需应用三元:

render() {
  return this.state.loading ? <Spinner/> : <App />
}

And make it a function:并使其成为一个函数:

loader.js加载器.js

import Spinner from './spinner.js';
export default function LoadManager = ({loading}) => props.loading ? <Spinner /> : props.children;

So in your components所以在你的组件中

render() {
  return 
    <LoadManager loading={this.state.loading}>
      <App />
    </LoadManager>
}

Other more common ways involves use of React Loadable:其他更常见的方法涉及使用 React Loadable:

import Loadable from 'react-loadable';
import Loading from './my-loading-component';

const LoadableComponent = Loadable({
  loader: () => import('./my-component'),
  loading: Loading,
});

export default class App extends React.Component {
  render() {
    return <LoadableComponent/>;
  }

This is more efficient too, has the code will be splitted.这也更有效,因为代码将被拆分。

make a utils folder and make a file (sppiner.js) in that file and write this code创建一个 utils 文件夹并在该文件中创建一个文件 (spiner.js) 并编写此代码

spinner.js微调器.js

export default function spinner({text}) {
  return (
    <div>
      <Spinner/>
      <span>{text}</span>
    </div>
  )

and after that in each component that you want use spinner write this code然后在你想要使用微调器的每个组件中编写此代码

import Spinner from "utils/spinner";

return(
...
{this.state.loading && <Spinner text={"your text..."} />}
...
)

What about adding this kind of function?添加这种功能怎么样?

function renderSpinner() {
  return this.state.loading && <Spinner />
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM