2016-03-03 2 views
2

У меня есть следующие Реагировать визуализации функции:Использование JQuery внутри Реагировать функцию визуализации

render: function() { 
     return (
      <Popup onClose={this.props.onClose}> 
       <Form entity="strategy" edit="/strategies/edit/" add="/strategies/add/"> 
        <h2>Create/Edit Strategy</h2> 
        <StrategyForm pending={this.state.pending} formData={this.state.data} /> 
        <div className="col-md-6"> 
         <Assisting /> 
        </div> 
       </Form> 
      </Popup> 
     ); 
    } 

Я хотел бы сделать h2 заголовка быть основаны на классе тела, поэтому мой вопрос ... я могу сделай это?

render: function() { 
     return (
      <Popup onClose={this.props.onClose}> 
       <Form entity="strategy" edit="/strategies/edit/" add="/strategies/add/"> 
        if ($('body').hasClass("this")) { 
        <h2>Create This Strategy</h2> 
        } else { 
        <h2>Create Another Strategy</h2> 
        } 
        <StrategyForm pending={this.state.pending} formData={this.state.data} /> 
        <div className="col-md-6"> 
         <Assisting /> 
        </div> 
       </Form> 
      </Popup> 
     ); 
    } 

Если это ужасная идея, может ли кто-нибудь сказать мне, что это лучший способ сделать это в реактиве?

+0

Это, наверное, плохая идея (определенно нет причин использовать jQuery для нее), но что вы на самом деле пытаетесь сделать? – tobiasandersen

+0

@tobiasandersen Я так и думал. Я просто пытаюсь вернуть два разных заголовка, основанных на классе тела. – JordanBarber

+0

Хотя можно сделать только то, что вы просите, это не «способ реагирования» на это. Используете ли вы Реакт только для этого компонента? Когда, как и почему вы устанавливаете класс тела? – tobiasandersen

ответ

2

Как уже отмечалось в некоторых комментариях к ОП, вы можете использовать , но это действительно не так.

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

псевдокод:

render() { 
    return (
     if (this.props.someProp) { 
      <h2>Create this Strategy</h2> 
     } else { 
      <h2>Create this Strategy</h2> 
     } 
    ); 
} 

IMO с помощью JQuery в компонентных методов является штраф (например, componentDidMount() или другие методы события/коммунальные услуги), но, как правило, вы хотите, чтобы избежать этого в render(). Вся цель компонентов React - поддерживать состояние, поэтому использование jQuery на лету, как ваш пример, побеждает эту идею.


Скажем, например, вы рендеринга ваш компонент таким образом:

ReactDOM.render(<MyComponent />, document.getElementById('some-div')); 

Вы можете передать свойства компонента:

ReactDOM.render(
    <MyComponent someProp={true} />, 
    document.getElementById('some-div') 
); 

Или в вашем случае:

ReactDOM.render(
    <MyComponent someProp={$('body').hasClass("this")} />, 
    document.getElementById('some-div') 
); 

... что-то li ke это. Это чрезмерно упрощенный пример (не проверенный, так что будьте осторожны с синтаксическими ошибками), но это должно помочь объяснить мой мыслительный процесс.


В качестве альтернативы, можно использовать метод componentDidMount() на классе.

componentDidMount() { 
    this.setState({ 
     someProp : $('body').hasClass("this") 
    }); 
} 

, а затем в render() проверки против this.state.someProp.

+0

Спасибо за ответ. Я не написал функцию React, но теперь я работаю внутри нее. Можете ли вы дать мне небольшое представление о том, как создать эту опору, основанную на классе тела. Извините, я не понимаю, как это работает. – JordanBarber

+1

Обновлено с примерами :-) – arthurakay

+0

you da man! Благодаря тонну – JordanBarber

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