use*_*363 1 react-native react-navigation
这是App.jsReact 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);
Run Code Online (Sandbox Code Playgroud)
将socket需要被传递到Chat组件。由于只有 Chat 组件使用socket,我想socket作为道具传递,而不是使用contextwhich 在许多组件之间共享数据。理想情况下,socket可以createStackNavigator像这样传入:
const navigator = createStackNavigator(
{
Event: Event,
Chat: {
screen: Chat, params: {socket: this.socket}
}
}, {
initialRouteName: "Event"
}
);
Run Code Online (Sandbox Code Playgroud)
如何做到这一点React Native 0.59?
我能想到的最简单的方法是创建一个新组件,该组件将 Chat 组件和套接字作为道具返回。
例子
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1300 次 |
| 最近记录: |