2016-02-15 3 views
0

Надеюсь, это кто-то из-за неловкости ... моя основная проблема заключается в следующем: я создал очень хороший набор реагирующих компонентов, которые я могу отобразить в моем asp. net 4.5 mvc 6 application using response.js, flux, gulp и Browsify.Инициализация компонента реагирования от asp.net

до тех пор, пока я его структурировал так, чтобы реагирующие компоненты имели все необходимые им данные, все идеально. Моя проблема теперь в том, что я хотел бы, чтобы MVC-просмотр включал реагирующие элементы и вводил свойства времени выполнения в компонент верхнего уровня по мере его создания. Поскольку я brpowserify-ки все мои реакции кода в пучок, я просто включить тег один сценарий, на мой взгляд:

<script src="/js/modules/AuthContainer.jsx"></script>

Но в то время как я обычно использую синтаксис JSX для создания экземпляра моего компонента с реквизитом как это:

... вид в ASP.NET никогда не переводится на чистом JS, так что не удается.

Я также попытался:

ReactDOM.render 
    (
    React.createElement(AuthContainer, { successPath: '/home' }), 
    document.getElementById('reactRoot') 
); 

... внутри блока сценария, на мой взгляд, но я получаю:

Uncaught ReferenceError: AuthContainer is not defined

Но я уверен, что я обнажая «AuthContainer» через пакет браузера, поэтому я не понимаю, почему он не может разрешить этот компонент.

Я знаю, что есть способ React.NET для этого, но я не могу получить этот серверный рендеринг для работы с моими компонентами, потому что я использую jQuery для извлечения данных в компоненте componentDidMount, а рендеринг на стороне сервера задыхаясь ищет $() jQuery.

Я хотел бы получить рендеринг на стороне сервера, но сейчас мне просто нужно, чтобы он работал, одним из способов другого. Может ли кто-нибудь предоставить простой фрагмент кода или суть того, как создать экземпляр компонента React из файла cshtml с помощью реквизитов времени выполнения?

ответ

0

Одно простое решение это, просто положить ваши стороне сервера свойства с Javascript в глобальном:

index.cshtml

<script> 
var __config__ = { 
    base: "@MyBackEdnVariable", 
    initialCount: "@Count", 
    user: { 
    id: @user.id, 
    name: @user.name, 
    } 
}; 
</script> 
<script src="/js/modules/AuthContainer.jsx"></script> 

И Реагировать использовать эту глобальную переменную:

AuthContainer.js

class AuthContainer extends React.Component { 
    render() { 
    return (
     <div>{this.props.user.name}</div> 
    ); 
    } 
} 

AuthContainer.defaultProps = { 
    initialCount: __config__.initialCount, 
    user: __config__.user 
}; 
+0

Ну, вы, безусловно, правы, это делает это, и это легко. Мне просто нужно поверить, что для этого есть еще один способ поддержки, поддерживаемый реквизитом-через-C# -сервер.Я использую эту технику и надеюсь, что возникнет другая методология ... спасибо. – user2403744

+0

Ну, я не верю, что существует способ «реквизит-впрыснутый-через-C# -сервер», или я не могу представить, как это может быть, и мне нравится думать об этом как о разделении проблем, ваш код на C# находится в бэкэнд и код Javascript находятся впереди, независимо от того, какой бэкэнд вы используете, это не имеет значения, код спереди, код реакции в этом случае, используют начальное состояние, которое необходимо предоставить, и может быть глобальной переменной, c'mon, взглянуть на источник instagram и искать переменную 'window._sharedData', она содержит все начальное состояние для приложения. Надеюсь, что это поможет вам. Grettings! –

+0

Ну, я имел в виду C# изнутри файла cshtml, такого рода вещи. Но неважно, это мой план, пока я не смогу заставить его работать с React.Net, который, я думаю, потребует некоторого повторного факторинга. Огромное спасибо. – user2403744

1

Для потомков:

ReactDOM.render 
(
    React.createElement 
    (
     MyComponent, 
     { 
      prop1: @numericValue, 
      prop2: '@textValue', 
     } 
    ), 
    document.getElementById('reactRoot') 
); 

магия была JSX-альтернативный синтаксис, который я знал, не мог получить ручку на этот день. Это позволяет вам создавать экземпляр реакции с использованием чистого JS и просто вставлять внутри простого тега скрипта в ваш cshtml.

hth.

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