Передать сокет в компонент - PullRequest
0 голосов
/ 14 апреля 2019

Вот приложение App.js React Native 0.59.

import React, {Component} from 'react';
import { createStackNavigator, createAppContainer } from 'react-navigation';
import Event from './src/components/event/Event.js';
import Chat from './src/components/chat/Chat.js';
import GLOBAL from "../../lib/global";

//socket.io
const socket = io(GLOBAL.BASE_URL, {
  transports: ['websocket'],
  jsonp: false
});

//create the navigator
const navigator = createStackNavigator(
  {
    Event:  Event,
    Chat: {
      screen: Chat,

    } 
  }, {
    initialRouteName: "Event"
  }
);

//export it as the root component
export default createAppContainer(navigator);  

socket необходимо передать в Chat компонент.Поскольку существует только компонент Chat, использующий socket, я хотел бы передать socket в качестве реквизита вместо использования context, который разделяет данные между многими компонентами.В идеале socket можно передать в createStackNavigator следующим образом:

const navigator = createStackNavigator(
      {
        Event:  Event,
        Chat: {
          screen: Chat, params: {socket: this.socket}            
        } 
      }, {
        initialRouteName: "Event"
      }
    );

Как это сделать с React Native 0.59?

1 Ответ

3 голосов
/ 14 апреля 2019

Самый простой способ, о котором я могу подумать, - это создать новый компонент, который возвращает компонент и сокет чата в качестве реквизита.

Пример

import React, {Component} from 'react';
import { createStackNavigator, createAppContainer } from 'react-navigation';
import Event from './src/components/event/Event.js';
import Chat from './src/components/chat/Chat.js';
import GLOBAL from "../../lib/global";

//socket.io
const socket = io(GLOBAL.BASE_URL, {
  transports: ['websocket'],
  jsonp: false
});

const ChatWithSocket = () => (<Chat socket={socket} />)

//create the navigator
const navigator = createStackNavigator(
  {
    Event:  Event,
    Chat: {
      screen: ChatWithSocket,

    } 
  }, {
    initialRouteName: "Event"
  }
);

//export it as the root component
export default createAppContainer(navigator); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...