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..."} />}
...
)