{"id":14293,"url":"\/distributions\/14293\/click?bit=1&hash=05c87a3ce0b7c4063dd46190317b7d4a16bc23b8ced3bfac605d44f253650a0f","hash":"05c87a3ce0b7c4063dd46190317b7d4a16bc23b8ced3bfac605d44f253650a0f","title":"\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0435 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u043d\u0438 \u043a\u043e\u043f\u0435\u0439\u043a\u0438","buttonText":"","imageUuid":""}

Разработка микро-интерфейса с помощью Single SPA на React

Single SPA - это JavaScript-фреймворк для создания микро-интерфейсов. Он позволяет вам создавать несколько небольших приложений и объединять их в одно более крупное. С помощью Single SPA вы можете использовать различные интерфейсные фреймворки (такие как React, Angular, Vue и т.д.) для создания своих микро-интерфейсов.

Вот некоторые ключевые особенности Single SPA:

  • Модульная архитектура: Single SPA спроектирован таким образом, чтобы быть модульным, что означает, что вы можете создавать небольшие независимые приложения, которые могут быть объединены для создания более крупного приложения.
  • Не зависит от фреймворка: Single SPA не привязан к какому-либо конкретному интерфейсному фреймворку, что означает, что вы можете использовать свой любимый фреймворк для создания микро-интерфейсов.
  • Динамическая загрузка: Single SPA позволяет вам динамически загружать ваши микро-интерфейсы, что означает, что вы можете загружать их по требованию, сокращая время начальной загрузки вашего приложения.
  • Гибкая маршрутизация: Single SPA предоставляет гибкую систему маршрутизации, которая позволяет вам определять, как загружаются и разгружаются ваши микро-интерфейсы.
  • Общие зависимости: Single SPA позволяет вам совместно использовать зависимости между вашими микро-интерфейсами, что может уменьшить общий размер вашего приложения.

В целом, Single SPA предоставляет мощный и гибкий способ создания микро-интерфейсов, который может помочь вам создавать более обслуживаемые и масштабируемые интерфейсные приложения.

Вот базовый пример того, как использовать Single SPA с React:

1. Во-первых, вам нужно создать новый проект React. Вы можете сделать это, выполнив следующую команду в вашем терминале:

npx create-react-app my-react-app

2. Далее установите следующие зависимости:

npm install single-spa-react react-dom react-router-dom

3. Создайте новый файл под названием root.component.js в вашем каталоге src. Это будет отправной точкой для вашего Single SPA приложения.

import React from 'react'; import ReactDOM from 'react-dom'; import singleSpaReact from 'single-spa-react'; import App from './App'; const reactLifecycles = singleSpaReact({ React, ReactDOM, rootComponent: App, }); export const { bootstrap, mount, unmount } = reactLifecycles;

4. Создайте новый файл с именем App.js в вашем каталоге src. Это будет основным компонентом вашего приложения React.

import React from 'react'; function App() { return ( <div> <h1>Hello, Single SPA with React!</h1> </div> ); } export default App;

5. Наконец, создайте новый файл с именем index.js в корне вашего проекта. Это позволит зарегистрировать ваше приложение в Single SPA.

import { registerApplication, start } from 'single-spa'; import { bootstrap, mount, unmount } from './src/root.component'; registerApplication( 'my-react-app', () => import('./src/root.component.js'), () => true, { bootstrap, mount, unmount } ); start();

6. Выполните следующую команду, чтобы запустить ваше Single SPA приложение:

npm start

Теперь вы должны иметь возможность видеть своё Single SPA приложение, запущенное в вашем браузере по адресу http://localhost:8080

7. Чтобы добавить маршрутизацию в ваше Single SPA приложение на React, вы можете использовать react-router-dom. Сначала установите зависимость:

npm install react-router-dom

8. Обновите свой App.js файл, содержащий базовый маршрутизатор и два маршрута:

import React from 'react'; import { Switch, Route, Link } from 'react-router-dom'; function Home() { return ( <div> <h1>Welcome to the Home page!</h1> <p>Click <Link to="/about">here</Link> to go to the About page.</p> </div> ); } function About() { return ( <div> <h1>About Us</h1> <p>This is the About page.</p> <p>Click <Link to="/">here</Link> to go back to the Home page.</p> </div> ); } function App() { return ( <div> <nav> <ul> <li><Link to="/">Home</Link></li> <li><Link to="/about">About</Link></li> </ul> </nav> <Switch> <Route exact path="/" component={Home} /> <Route path="/about" component={About} /> </Switch> </div> ); } export default App;

9. Обновите файл root.component.js для использования компонента BrowserRouter из react-router-dom:

import React from 'react'; import ReactDOM from 'react-dom'; import { BrowserRouter } from 'react-router-dom'; import singleSpaReact from 'single-spa-react'; import App from './App'; const reactLifecycles = singleSpaReact({ React, ReactDOM, rootComponent: (props) => ( <BrowserRouter> <App {...props} /> </BrowserRouter> ), }); export const { bootstrap, mount, unmount } = reactLifecycles;

10. Вот и всё! Теперь вы можете перемещаться между страницами "Главная" и "О программе" в вашем Single SPA приложении.

Обратите внимание, что это всего лишь базовый пример, который поможет вам начать. Существует множество других функций и библиотек, которые вы можете использовать с Single SPA и React, таких как Redux и styled-components. Ознакомьтесь с документацией Single SPA и документацией React для получения дополнительной информации.

11. Чтобы добавить управление состоянием в ваше Single SPA приложение, вы можете использовать redux. Сначала установите зависимость:

npm install redux react-redux

12. Создайте новый файл под названием store.js в вашем каталоге src, чтобы определить хранилище Redux:

import { createStore } from 'redux'; const initialState = { count: 0, }; function reducer(state = initialState, action) { switch (action.type) { case 'INCREMENT': return { ...state, count: state.count + 1, }; case 'DECREMENT': return { ...state, count: state.count - 1, }; default: return state; } } const store = createStore(reducer); export default store;

13. Обновите файл App.js для использования хуков useSelector и useDispatch из react-redux для доступа и обновления состояния:

import React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { Switch, Route, Link } from 'react-router-dom'; function Home() { const count = useSelector(state => state.count); const dispatch = useDispatch(); const handleIncrement = () => { dispatch({ type: 'INCREMENT' }); }; const handleDecrement = () => { dispatch({ type: 'DECREMENT' }); }; return ( <div> <h1>Welcome to the Home page!</h1> <p>Count: {count}</p> <button onClick={handleIncrement}>Increment</button> <button onClick={handleDecrement}>Decrement</button> <p>Click <Link to="/about">here</Link> to go to the About page.</p> </div> ); } function About() { return ( <div> <h1>About Us</h1> <p>This is the About page.</p> <p>Click <Link to="/">here</Link> to go back to the Home page.</p> </div> ); } function App() { return ( <div> <nav> <ul> <li><Link to="/">Home</Link></li> <li><Link to="/about">About</Link></li> </ul> </nav> <Switch> <Route exact path="/" component={Home} /> <Route path="/about" component={About} /> </Switch> </div> ); } export default App;

14. Обновите файл root.component.js для использования компонента Provider из react-redux для передачи хранилища вашим компонентам:

import React from 'react'; import ReactDOM from 'react-dom'; import { BrowserRouter } from 'react-router-dom'; import { Provider } from 'react-redux'; import singleSpaReact from 'single-spa-react'; import App from './App'; import store from './store'; const reactLifecycles = singleSpaReact({ React, ReactDOM, rootComponent: (props) => ( <Provider store={store}> <BrowserRouter> <App {...props} /> </BrowserRouter> </Provider> ), }); export const { bootstrap, mount, unmount } = reactLifecycles;

15. Вот и всё! Теперь вы можете использовать Redux для управления состоянием вашего Single SPA приложения.

Обратите внимание, что это всего лишь базовый пример, который поможет вам начать. Существует множество других функций и библиотек, которые вы можете использовать с Single SPA и React, таких как react-router-redux

16. Чтобы использовать react-router-redux, сначала установите зависимость:

npm install --save react-router-redux@next

17. Обновите файл store.js для использования функции connectRouter из react-router-redux для добавления состояния маршрутизации в ваше хранилище Redux:

import { createStore, combineReducers } from 'redux'; import { connectRouter } from 'connected-react-router'; const rootReducer = (history) => combineReducers({ router: connectRouter(history), count: (state = 0, action) => { switch (action.type) { case 'INCREMENT': return state + 1; case 'DECREMENT': return state - 1; default: return state; } }, }); export default function configureStore(history) { const store = createStore( rootReducer(history), window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() ); return store; }

18. Обновите файл root.component.js для использования компонента ConnectedRouter из react-router-redux и передачи объекта history в ваше хранилище:

import React from 'react'; import ReactDOM from 'react-dom'; import { createBrowserHistory } from 'history'; import { Provider } from 'react-redux'; import { ConnectedRouter } from 'connected-react-router'; import singleSpaReact from 'single-spa-react'; import App from './App'; import configureStore from './store'; const history = createBrowserHistory(); const store = configureStore(history); const reactLifecycles = singleSpaReact({ React, ReactDOM, rootComponent: (props) => ( <Provider store={store}> <ConnectedRouter history={history}> <App {...props} /> </ConnectedRouter> </Provider> ), }); export const { bootstrap, mount, unmount } = reactLifecycles;

19. Обновите файл App.js для использования хука useSelector из react-redux для доступа к состоянию маршрутизатора:

import React from "react"; import { useSelector } from "react-redux"; import { Switch, Route, Link } from "react-router-dom"; function Home() { const count = useSelector((state) => state.count); return ( <div> <h1>Welcome to the Home page!</h1> <p>Count: {count}</p> <button onClick={() => {}}>Increment</button> <button onClick={() => {}}>Decrement</button> </div> ); } function About() { return ( <div> <h1>Welcome to the About page!</h1> <p>This is a demo of single-spa with React and Redux.</p> </div> ); } function App() { return ( <div> <nav> <ul> <li> <Link to="/">Home</Link> </li> <li> <Link to="/about">About</Link> </li> </ul> </nav> <Switch> <Route exact path="/" component={Home} /> <Route path="/about" component={About} /> </Switch> </div> ); } export default App;

20. Наконец, мы зарегистрировали наше приложение React в качестве микро-интерфейса с Single SPA, обновив файл index.js и использовали функцию start из single-spa, чтобы зарегистрироваться и запустить наш микро-интерфейс.

import { registerApplication, start } from 'single-spa'; import { constructApplications } from 'single-spa-layout'; import { getLayoutEngine } from '@single-spa-layout/webpack'; import { LayoutEngine } from '@single-spa-layout'; import { matchRoute } from 'single-spa-react-router'; import { pathToRegexp } from 'path-to-regexp'; import rootComponent from './root.component'; const routes = [ { path: '/', component: rootComponent }, { path: '/react', app: () => System.import('react-app'), match: matchRoute('/') }, { path: '/vue', app: () => System.import('vue-app'), match: matchRoute('/vue') }, ]; const layoutData = { 'primary-navbar': [ ['navbar'], ], 'react-container': [ ['react-app'], ], 'vue-container': [ ['vue-app'], ], }; const layoutEngine = new LayoutEngine({ routes, layoutData, urlRerouteOnly: true, pathname: window.location.pathname, active: 'primary-navbar', engine: getLayoutEngine(), pathToRegexp, }); const applications = constructApplications({ routes, loadApp({ app }) { return app().then((module) => { return { bootstrap: module.bootstrap, mount: module.mount, unmount: module.unmount, }; }); }, }); applications.forEach(registerApplication); start();

И это всё! Теперь вы создали микро-интерфейс с Single SPA, используя React и Redux с react-router-redux для маршрутизации. Этот код должен послужить отправной точкой для создания более сложных приложений с Single SPA с помощью React.

21. Не забудьте запустить свой проект, запустив npm start в корневом каталоге вашего проекта. Теперь вы должны иметь возможность просматривать его, посетив http://localhost:9000/react .

Поздравляем, вы успешно создали Single SPA микро-интерфейс с использованием React и Redux!

Статья была взята из этого источника:

0
Комментарии
-3 комментариев
Раскрывать всегда