Как использовать ref в другом компоненте в реагировать родной? - PullRequest
0 голосов
/ 09 апреля 2019

Я использую реагировать родной mpaboxgl в моем приложении.

import MapboxGL from "@mapbox/react-native-mapbox-gl";


<MapboxGL.MapView
  logoEnabled={false}
  attributionEnabled={false}
  ref={(e) => { this.oMap = e }}
  zoomLevel={6}
  centerCoordinate={[54.0, 24.0]}> 
<MapboxGL.MapView> 

Как использовать oMap в другом компоненте? Так что я могу сделать что-то вроде включения / выключения слоя из другого компонента / страницы.

Ответы [ 2 ]

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

ОБНОВЛЕНИЕ :

используйте глобальную переменную, которая будет работать.

ref={ref=>{
   global.input=ref;
   }}

теперь вы можете использовать global.input.focus() в любом месте приложения после этого экрана.


вот пример для достижения этого: https://snack.expo.io/ryJk3hFKN

Вы можете создать одну функцию, которая возвращает ref этого компонента.
и передать эту функцию в качестве реквизита в других компонентах

import * as React from 'react';
import { Text, View, StyleSheet, TextInput, TouchableOpacity } from 'react-native';

export default class App extends React.Component {
  getInputRef = () => this.input;

  render() {
    return (
      <View style={styles.container}>
        <TextInput
          ref={ref => {
            this.input = ref;
          }}
          placeholder="Hi there"
        />
        <SecondComp getInputRef={this.getInputRef} />
      </View>
    );
  }
}

class SecondComp extends React.Component {
  render() {
    return (
      <TouchableOpacity
        onPress={() => {
          this.props.getInputRef().focus();
        }}>
        <Text>click to Focus TextInput from the other component</Text>
      </TouchableOpacity>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'space-around',
    backgroundColor: '#ecf0f1',
    padding: 8,
  },
});
0 голосов
/ 09 апреля 2019

Попробуйте передать его как опору компоненту, в котором вы хотите использовать ссылки. Например.

<SecondComponent refOfFirstComponent = this.refs.oMap/>

и в SecondComponent используйте его где-нибудь так:

this.props.refOfFirstComponent.doSomething();
...