我非常同意Chase 的回答。
不过,如果您需要其他方法,您可以使用context api。您可以在 App 根目录或其他嵌套组件树中声明您希望轻松访问的组件集合。
这里有一个useContext 钩子的例子,但钩子不是必须的。结构是标准的create-react-app结构。
我们想要全局访问的组件 - src/deep/Header.js:
function Header() {
return (
<h1>
I am a global component
</h1>
);
}
export default Header;
上下文创建 - src/global-components-context.js:
import React from 'react';
const MyContext = React.createContext(null);
export default MyContext;
全局组件的分组 - src/global-components.js:
import Header from './deep/Header';
const contextValue = {
Header,
};
export default contextValue;
应用初始化文件 - src/index.js:
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import MyContext from './global-components-context';
import contextValue from './global-component';
ReactDOM.render(
<MyContext.Provider value={contextValue}>
<App />
</MyContext.Provider>,
document.getElementById('root')
);
使用组件而不导入它 - src/App.js:
import { useContext } from 'react';
import globalComponent from './global-components-context';
function App() {
const Context = useContext(globalComponent);
return (
<div className="App">
<Context.Header />
</div>
);
}
export default App;
我认为这是您可以在 react 中拥有的最全球化的组件。请注意,您仍然需要在要使用全局组件的任何位置导入上下文。
另外一项免责声明是,全局组件非常难以测试并且通常难以推理。我相信这就是为什么 react 没有标准解决方案的原因。
希望我能帮上忙