Jestem nowy w rozwoju reagowania native, znam IOS. Chcę tylko wiedzieć o kilku punktach:

  1. Czy możemy dodać kod IOS (Swift lub Celive C) w aplikacji reagującej?
  2. Czy możemy dodawać reagować native views do istniejącej aplikacji iOS?

Pojawiłem się i dostałem przykłady, które wskazują na to, że drugi jest całkiem możliwy, a Instagram zrobił go na ekranie profilu.

Ale nie mogę znaleźć przykładów, gdzie jest to natywna aplikacja reagująca i wprowadzamy kod SWIFT lub obiektywny-C pomiędzy.

Jeśli ktoś znany o żadnych linkach lub przykładach dostępnych dla przypadku 1, daj mi znać o tym.

2. pytanie:

  • Kiedy integrujemy reagować rodzimy z iOS, będzie to przez most. Powiedzmy, że tworzę aplikację w SWIFT, aby uzyskać w nim reagować na nim widoki, musimy przejść przez 2 mosty, jedna konwersja Swift do obiektywnego-C, a następnie most między obiektywem-C, aby reagować natywne. Czy to jest poprawne? Jeśli tak, będzie tak szybko jak ta rodzica aplikacja?
1
Sudhanshu Gupta 4 czerwiec 2018, 12:48

2 odpowiedzi

Czy możemy dodać kod IOS (SWIFT lub CELSIVE C) w aplikacji reagującej

Tak, udało mi się to zrobić: -

  1. Stworzyłem reagujący projekt natywny, skompilował go i uruchomił go w symulatorze.
  2. Przejdź do folderu IOS w strukturze katalogowej w projekcie i otwórz .xcodeproj w XCode.
  3. Utwórz obiektywny plik C (MyOBJCClass) i wykonaj funkcje, które chcesz używać w reakcji.

Myobjcclass.h.

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>

@interface MyObjcClass : NSObject <RCTBridgeModule>

@end

Myobjcclass.m.

#import "MyObjcClass.h"

@implementation MyObjcClass

// tells react bridge to bridge our created class
RCT_EXPORT_MODULE()

- (NSDictionary *)constantsToExport {
  return @{@"CreatedBy": @"Type any number and get Square"};
}

RCT_EXPORT_METHOD(squareNumber:(int)number getCallback:(RCTResponseSenderBlock)callback) {
  callback(@[[NSNull null], [NSNumber numberWithInt:(number*number)]]);
}

Teraz możemy zadzwonić do tych metod w JS. Poniżej pokażę, jak zadzwonić do celu C w reakcji.

App.js

import React from 'react';
import { StyleSheet, Text, View, TextInput, Button } from 'react-native';

// to import native code
import {NativeModules} from 'react-native';

var MyObjcClass = NativeModules.MyObjcClass;

export default class App extends React.Component {

  state = {
    number:0
  };

  squareMe(num) {
    if (num == '') {
      return;
    }

    MyObjcClass.squareNumber(parseInt(num), (error, number) => {
      if (error) {
        console.error(error);
      } else {
        this.setState({number: number});
      }
    })
  }

  render() {

    return (
      <View style={styles.container}>
        <Text style={styles.spaceBetween}>Objective C inclusion</Text>
        <TextInput placeholder="type a number ...." style={styles.input} onChangeText={(text) => this.squareMe(text)}/>
        <ListItem placeName={this.state.number}></ListItem>
      </View>
      );
  }
}
0
Sudhanshu Gupta 6 czerwiec 2018, 08:38

Tak, możemy to zrobić

import {Platform} from 'react-native';

const majorVersionIOS = parseInt(Platform.Version, 10);
if (majorVersionIOS <= 9) {
  console.log('Work around a change in behavior');
}
0
SHUBHAM TYAGI 10 styczeń 2020, 16:48