2016-12-05 6 views
1

Я пытаюсь импортировать/требовать компоненты динамически, но как-то, когда я это делаю, React жалуется. Функция require находит ее, но React выдает ошибку, говоря, что ей не хватает некоторых функций «t» и т. Д. Все это в электронном приложении.Импортировать или потребовать динамически реагировать на компоненты

У меня есть настройка мастера (это работает, но не так элегантно, я думаю), где каждая страница имеет собственный макет и компонент jsx. Если я хочу добавить новую страницу, я не хочу управлять x-количеством файлов, и на данный момент мне приходится из-за настройки, которую я имею в настоящее время. Ниже вы можете найти то, что я хочу достичь, и что я делаю сейчас, чтобы достичь этого. Если есть какие-либо предложения, код пахнет или улучшит параметры, сообщите мне, поскольку я совершенно новый для React и ES2015 (как я из фона C#).

То, что я пытаюсь достичь

export default class WizardPageContainer extends Component {  
    // Constructor 
    constructor(props) { 
     super(props);   
    } 

    // Render 
    render() { 
     const WizardPage = require(`./path/to/${this.props.step.id}`); 

     return (
      <WizardPage step={this.props.step} /> 
     ); 
    } 
} 

Как я сейчас делаю это: это означает, что я должен объявить импорт/файлы сначала на верхней части компонента «WizardPageContainer». Это означает дополнительную работу и склонность к ошибкам/забыть о вещах. Я должен добавить, этот код работает в настоящее время в порядке, но я не думаю, что это элегантное/будущее доказательство:

/* PAGES */ 
import WizardPage_Welcome from './pages/0.wizard.welcome'; 
import WizardPage_SystemCheck from './pages/1.wizard.systemCheck'; 
import WizardPage_SignIn from './pages/2.wizard.signIn'; 
import WizardPage_ExamCode from './pages/3.wizard.examCode'; 
import WizardPage_TakeExamination from './pages/4.wizard.takeExamination'; 
import WizardPage_Close from './pages/5.wizard.close'; 
const pages = [  
    WizardPage_Welcome, 
    WizardPage_SystemCheck, 
    WizardPage_SignIn, 
    WizardPage_ExamCode, 
    WizardPage_TakeExamination, 
    WizardPage_Close 
]; 
/*/********************************************************************/// 

/* ******************************************************************** */ 
/* COMPONENT */ 
export default class WizardPageContainer extends Component {  
    // Constructor 
    constructor(props) { 
     super(props);   
    } 

    // Render 
    render() { 
     const WizardPage = pages[`${this.props.step.id}`]; 

     return (
      <WizardPage step={this.props.step} /> 
     ); 
    } 
} 
/*/********************************************************************/// 
+0

Возможно, решение было найдено на http://stackoverflow.com/a/36678030/1155847. Я попробую это и отчитаю или закрою вопрос, если это сработает. –

ответ

1

Я думаю, речь идет о «по умолчанию». У меня такая проблема. Вы можете проверить этот код; https://github.com/robeio/robe-react-admin/blob/master/src/app/HasAuthorization.jsx#L10

Также вы можете проверить пример использования; https://github.com/robeio/robe-react-admin/blob/master/src/app/HasAuthorization.jsx#L26

+0

, поэтому использование «importComponent» должно выполнить трюк или использовать «require» или «import», если я правильно понял ваше предложение? –

+1

вы используете это; importComponent (требуется («ваш путь»)) – Hasan

+0

спасибо, с этим советом я нашел решение, которое я объясню более подробно. –

1

Ваших const pages потребности быть объектом, а не массив.

Вы можете увидеть рабочую версию я сделал это здесь: https://github.com/Frazer/meteor-react-nav/blob/master/lib/jsx/App.jsx

+0

Возможно, я должен добавить, что код страницы consty работает правильно для меня сейчас. Но я просто думаю, что он не достаточно изящный, поскольку я загружаю шаги в памяти из json config и просто хочу посмотреть страницы jsx во время выполнения. Теперь я в основном делаю эти вещи дважды, с операторами импорта и объектом const pages, а также с json-файлом, который у меня есть (не включен в демо-код). –

+1

, поэтому вы пытаетесь найти способ сделать импорт и создать страницы const, используя данные из json-файла? –

+0

Да, я исхожу из .Net/Java-фона, где эти вещи при создании пользовательских интерфейсов/мастеров или меню тривиальны, с конфигурационными файлами или другими - например. предоставляемые db-запросами и т. д. Может быть, это что-то, что считается не выполненным или плохой практикой здесь? Но да, в основном я получаю данные, скажем, в json, в котором хранятся имена определенных частей, которые я затем загружаю (или искал) в файловую систему, а затем загружаю через require и store в const. Возможно, это план - действительно динамичный, на лету. –

-4

Лучший совет: используйте Webpack для обработки вашего импорта, это намного эффективнее, чем когда-либо.

Смежные вопросы