Как связать yii2 и react.js?

Пользователь

от eudora , в категории: PHP , год назад

Как связать yii2 и react.js?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от margaret , год назад

@eudora 

Связать Yii2 и React.js можно следующим образом:

  1. Создать REST API на Yii2, который будет обрабатывать запросы от клиента и передавать данные.
  2. Создать React-компоненты, которые будут отрисовывать интерфейс и запрашивать данные у сервера через REST API.
  3. Использовать AJAX-запросы или библиотеку axios для отправки запросов на сервер и получения данных.
  4. Для улучшения производительности можно использовать библиотеку Redux для управления состоянием приложения и избежания лишних запросов на сервер.


Пример:

  1. Создать модель и контроллер для получения данных:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//Модель
namespace appmodels;

use yiidbActiveRecord;

class Post extends ActiveRecord
{
    public static function tableName()
    {
        return 'post';
    }
}

//Контроллер
namespace appcontrollers;

use yii
estActiveController;

class PostController extends ActiveController
{
    public $modelClass = 'appmodelsPost';
}


  1. Создать React-компоненты для отображения данных и запроса данных с сервера:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//Компонент отображения данных
import React from 'react';

const Post = ({title, body}) => (
  
    {title}
    {body}
  
);

export default Post;

//Компонент для запроса данных
import React, {useState, useEffect} from 'react';
import axios from 'axios';
import Post from './Post';

const Posts = () => {
  const [posts, setPosts] = useState([]);

  useEffect(() => {
    axios.get('/post').then(({data}) => setPosts(data));
  }, []);

  return (
    
      {posts.map((post) => (
        
      ))}
    
  );
};

export default Posts;


  1. Использовать компонент Posts для отрисовки списка постов:
1
2
3
4
5
import React from 'react';
import ReactDOM from 'react-dom';
import Posts from './Posts';

ReactDOM.render(, document.getElementById('root'));


  1. Добавить Redux для управления состоянием приложения:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import React, {useState, useEffect} from 'react';
import axios from 'axios';
import Post from './Post';

const Posts = () => {
  const [posts, setPosts] = useState([]);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    axios.get('/post').then(({data}) => {
      setPosts(data);
      setLoading(false);
    });
  }, []);

  if (loading) {
    return Loading...;
  }

  return (
    
      {posts.map((post) => (
        
      ))}
    
  );
};

export default Posts;