Отправка серверной части React.js с помощью PHP

Я хотел бы разработать темы/плагины для WordPress на основе React. Чтобы сделать его удобным для поисковых систем, мне нужно, чтобы он изначально отображался на сервере (серверный рендеринг).

Насколько я знаю, единственный способ сделать это - использовать response-php-v8js, для которого требуется расширение PECL V8js. Это проблема, поскольку я не контролирую платформу, на которой будут запускаться эти темы/плагины.

Есть ли способ заставить React и WordPress работать вместе без необходимости устанавливать дополнительные расширения? Возможно, путем сборки/компиляции файлов React в PHP?

Ответ 1

Если вы хотите, чтобы ваш контент был проиндексирован поисковой системой без js, вы можете распечатать свой минимальный контент с помощью Wordpress, всего лишь минимальные + важные метатеги, возможно, локализовать начальное состояние для вашего реагирующего приложения для загрузки. Достаточно было бы голой темы костей, такой http://underscores.me/. Когда js доступен, вы можете заменить весь сгенерированный контент WordPress на "Реагировать".

Идеальным является то, что React генерирует контент для вас. Но это трудно, пока мы не увидим, что расширение nodejs/PECL V8js доступно повсеместно.

Ответ 2

Если вы можете хотя бы установить nodejs и запустить процесс узла, тогда все должно быть хорошо, хотя и не так просто.

Вам потребуется сгенерировать ssr-версию ваших активов и использовать ее в процессе узла, который будет прослушивать сокет для записи результата html.

В вашем контроллере вы можете создать сокет для вашего процесса узла (что-то вроде stream_socket_client (...)), а затем вы можете отправить фиктивную функцию, написанную в виде строки javascript, в этот сокет (что-то вроде stream_socket_sendto ($ sock, "getResultForMyWidget (someParams) ) {...} ")). Эта функция будет оценена в процессе узла, который возвратит ответ контроллеру (html-ответ как ReactDOMServer.renderToString от компонента, который вы хотите отобразить).

Что это за большая картина.

Существует плагин Symfony, который иллюстрирует его очень четко (см. этот github) и поставляется с фиктивным процессом узла сервера, чтобы проиллюстрировать, как он обрабатывает прослушивание сокета и вычисляет входящую функцию и возвращает результат html. Смотрите также пример в песочнице для большей картины и глубокой реализации. Вы должны быть в состоянии приспособить его к WordPress.