Javascript react中每个组件的微调器

Javascript react中每个组件的微调器,javascript,reactjs,Javascript,Reactjs,为整个应用程序实现微调器组件的最佳实践和有效方法是什么 我的示例代码: render() { if (this.state.loading) return ( <Spinner/> ) return ( <div className="container"> ) } render(){ if(this.state.loading) 返回( ) 返回( ) } 我希望避免重写检查每个组件加载状态的相同逻辑。 TIA.只需

为整个应用程序实现微调器组件的最佳实践和有效方法是什么

我的示例代码:

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

  return (
    <div className="container">
  )
}
render(){
if(this.state.loading)
返回(
)
返回(
)
}
我希望避免重写检查每个组件加载状态的相同逻辑。
TIA.

只需使用三元:

render() {
  return this.state.loading ? <Spinner/> : <App />
}
render(){
是否返回此.state.loading?:
}
并使其成为一种功能:

loader.js

import Spinner from './spinner.js';
export default function LoadManager = ({loading}) => props.loading ? <Spinner /> : props.children;
从“/Spinner.js”导入微调器;
导出默认函数LoadManager=({loading})=>props.loading?:道具、儿童;
因此,在您的组件中

render() {
  return 
    <LoadManager loading={this.state.loading}>
      <App />
    </LoadManager>
}
render(){
返回
}
其他更常见的方法包括使用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/>;
  }
从“react Loadable”导入可加载;
从“/my Loading component”导入加载;
常量LoadableComponent=可加载({
加载程序:()=>导入('./我的组件'),
加载:加载,
});
导出默认类App扩展React.Component{
render(){
返回;
}

这也更有效,因为代码将被拆分。

添加这种函数怎么样

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

创建一个utils文件夹并创建一个文件(sppiner.js) 在该文件中,并编写以下代码

spinner.js

导出默认函数微调器({text}){
返回(
{text}
)
然后,在每个组件中,您要使用spinner编写以下代码

import Spinner from "utils/spinner";

return(
...
{this.state.loading && <Spinner text={"your text..."} />}
...
)
从“utils/Spinner”导入微调器;
返回(
...
{this.state.loading&&}
...
)

试图避免重复单个
,如果对我来说
似乎过于优化了,那么你可能会因为试图避免而使项目变得更加复杂。这是一个自以为是的问题。三元或如果……否则都是条件语句,在性能上非常相似。而且,这看起来像微观优化注意,使用
&&
运算符时,仅当第一个运算符为truthy时才计算运算符的右部分,否则将返回左部分。在这种情况下,如果加载为false,则将呈现false;如果加载为0,则将呈现“0”作为字符串。这是如何更有效的?这只是更干净,只有一个返回,没有if,因为条件只有两个基于booleanCorrect的可能输出!这是以不同风格编写的相同代码。因此基本上它不解决任何问题。如果OP对
if…else
的性能不满意,这将是same、 你可能会说捆绑包的大小,因为它会占用更少的行数,但是如果你使用像webpack/gulp这样的捆绑包,它会自动完成。所以代码应该更可读instead@RajeshOP simple希望不重复代码,或者减少引入其他组件的负担。不涉及代码拆分问题或性能。wh如果微调器切换,所有子级的ole应用程序组件将被重新渲染。这将对性能产生很大影响。@mohammad answer更有效。好的,欢迎您的惠康如果您喜欢此答案,请接受它谢谢@Cumiblat
import Spinner from "utils/spinner";

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