Ответы пользователя по тегу Angular
  • Можно ли на ReactJS динамически загружать компоненты без знания о них при сборке самого приложения (как это реализовано в Angular 2+)?

    @montecazazza
    Node, GraphQL, React
    Это называется code splitting - фича включена в Webpack 2. инструкция import стала асинхронная. Можно сделать HOC (asyncComponent) и использовать его для удобства (обычно код делят по раутам).
    Потребуется настроить Webpack соответствующим образом, чтобы делил код по частям (chunks). В общем ищите по "code splitting React", кто ищет тот найдет

    Вот asyncComponent в самом простом варианте
    import React, { Component } from 'react';
    
    export default function asyncComponent(importComponent) {
      return class AsyncComponent extends Component {
        constructor(props) {
          super(props);
          this.state = { Component: null };
        }
        async componentDidMount() {
          const { default: Component } = await importComponent();
          this.setState({ Component });
        }
        render() {
          const { Component } = this.state;
          return Component && <Component {...this.props} />
        }
      }
    }


    Вот как он может быть использован с React Router 4
    import React from 'react';
    import { Route, Switch } from 'react-router-dom';
    
    import { Wrapper } from 'Styles';
    import SyncComponent from 'Components/SyncComponent';
    import { asyncComponent } from 'Helpers';
    
    const AsyncComponent = asyncComponent(() => import('Components/AsyncComponent'));
    
    const App = () => (
      <Wrapper>
        <Switch>
          <Route path='/route-to-async/' component={AsyncComponent}/>
          <Route component={SyncComponent}/>
        </Switch>
      </Wrapper>
    );
    export default App;
    Ответ написан