Как правильно создавать и отображать функциональные компоненты?

Я пытаюсь создать и визуализировать функциональный компонент, используя инструкции здесь в качестве основы. Из того, что я там отправил, я должен быть в состоянии сделать что-то вроде:

class MyComponent extends React.Component {
   render() {
     return (
       <div>
         <OtherComponent props = "test" />
       </div>
   )}
   function OtherComponent(props) {
    return (
      <div>
        test
      </div>
    );
   }
}

Но это выдает ошибку:

Unexpected token:    function OtherComponent(props) {
                          ^

Я нашел несколько сообщений, в которых предлагалось удалить function, поэтому я попробовал это, но затем выдает ошибку:

OtherComponent is not defined

Я могу заставить его работать, создав отдельный компонент класса, например:

class OtherComponent extends React.Component {
   render() {

Но это не то, чем я хочу заниматься. Как правильно создать/рендерить функциональный компонент в React.js?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
51
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Попробуй это

class MyComponent extends React.Component {
  OtherComponent = (props) => {
    return (
      <div>
        test
      </div>
    );
   }

   render() {
     return (
       <div>
         {this.OtherComponent("test")}
       </div>
   )}

}

Все еще выдает ошибку OtherComponent is not defined

Abe Miessler 09.04.2019 18:02

Это также работает для меня, но вам следует делать это, только если вы хотите вложить свои компоненты, такие как, например, <Table.Row>.

optimisticupdate 09.04.2019 18:14
Ответ принят как подходящий

Например этот работает. Смотрите документы ;) React — Составление компонентов

function OtherComponent(props) {
  return <div>test</div>;
}

class App extends React.Component {
  render() {
    return (
      <div>
        <OtherComponent props = "test" />
      </div>
    );
  }
}

Вы не можете определить компонент внутри другого компонента. Функциональный компонент означает, что компонент создан из функции и не является классом. У него не может быть собственного состояния, потому что состояние инициализируется в конструкторе класса. Прочтите эту статью для получения дополнительной информации https://hackernoon.com/react-stateless-functional-components-nine-wins-you-might-have-overlooked-997b0d933dbc

const otherComponent = (props) =>
  <div>
    test
  </div>;

Вот еще один способ. Неправильно объявлять компонент в функции рендеринга. Если он используется исключительно в родительском компоненте, почему бы не сделать это явным и не использовать статический

class MyComponent extends React.Component {
  static myOtherComponent = (props) => <div>{'test'}</div>

render(){
  return(
    <div>
      <MyComponent.myOtherComponent  {props} />
    </div>
  )
}

Поведение myOtherComponent контролируется исключительно через реквизиты, которые он получает, у него не будет собственного состояния.

Или вы можете просто сделать его отдельным компонентом, например

export default myOtherComponent  = (props) => ()

и импортируйте его в MyComponent. Обратите внимание, что теперь с хуками (см. React Docs) вы можете использовать хуки для имитации состояния и т. д. в функциональных компонентах, и последний подход может быть вашим самым чистым и гибким подходом.

Таким образом, вы можете определить функциональный компонент

function OtherComponent(props) {
  return <div>{props}</div>;
}

И теперь вы можете использовать функциональный компонент в своем приложении (компонент класса), как показано ниже.

class App extends React.Component {
  render() {
    return (
      <div>
        <OtherComponent props = "test" />
      </div>
    );
  }
}

Другие вопросы по теме