Единая кодовая база для мобильных устройств и Интернета

Мы собираемся начать для нашей компании проект приложения статуса заказа, которое будет размещено как веб-приложение, а также приложение для Android / iOS. Мы начали исследования и пришли к выводу, что начать с React и React Native или Angular и Native Script. Может быть. кто-нибудь предлагает, какой из них выбрать, поскольку конечной целью было поддержание единой базы кода как для Интернета, так и для мобильных устройств.

[Edit 1]: Спасибо, ребята. Многие из вас предлагали Ionic / Cordova, PWA, но все они, похоже, создают гибридное приложение, но я искал что-то вроде собственного приложения, которое также может работать в браузере. Например, в реакции native у вас есть такая архитектура, в которой файл JavaScript преобразуется в настоящий нативный компонент (Android / IOS). Но проблема с response и react-native в том, что нет единой базы кода.

Так же вариант angular и PWA

Pardeep Jain 02.05.2018 09:49

Могу я спросить, почему вы не выбрали Ionic вместо Nativescript?

Phil 02.05.2018 09:51

Когда я проверил Ionic, у меня сложилось впечатление, что невозможно иметь одну кодовую базу, потому что Ionic и Cordova, на которых она основана, используют шаблон стека страниц (напоминающий способ сохранения данных приложений в мобильных операционных системах) для организации структура, в то время как в Angular у вас обычно не будет нескольких app.components, а будет только один, который загружает ваше приложение с помощью панели навигации, нижнего колонтитула и всех других элементов, которые всегда присутствуют

Phil 02.05.2018 09:55

@Phil с Ionic это будет скорее гибридное приложение, а не настоящее нативное приложение. Причина, по которой я выбрал react-native, заключалась в том, что он использовал код js для нативного компонента. Ionic или разрыв телефона будут более гибридным подходом. затем родное приложение.

anbu selvan 02.05.2018 10:17
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
5
4
6 885
8

Ответы 8

Есть много вариантов единой базы кода для web / ios / android. Самый простой - создать веб-приложение.

Некоторые варианты:

  • Прогрессивное веб-приложение
  • Гибридные приложения (например, Ionic)

Я сделал один пакет на основе кода для ReactJS и React-Native. Я могу рассказать вам свое решение и свой опыт с этим.

UI

Обе структуры используют один и тот же синтаксис для описания пользовательского интерфейса (JSX). Если вы углубитесь в детали, то увидите, что есть несколько отличий:

  • ReactJS: <div/>
  • React-Native: <View/> Это означает, что в вашем приложении / архитектуре всегда будет часть «фреймворк». Чтобы свести к минимуму конкретный код до различий, вы можете использовать JSX для предоставления свойств таким компонентам, как стили, данные или событие функции.

Функциональность

React-Native использует / содержит фреймворк ReactJS и все запускается на виртуальной машине JavaScript. Таким образом, для "неродная / пользовательская функциональность" вы можете использовать старые добрые функции, написанные на JavaScript, или пакеты, предоставленные (например, через npm), в обоих приложениях (ReactJS && React-Native)

Как использовать один код для обоих приложений

Теперь у нас нет проблем с функциональностью. Но как преодолеть специфику пользовательского интерфейса. Мое решение заключалось в том, чтобы написать какой-то псевдокод для компонентов, специфичных для фреймворка:

  1. Для каждого фреймворка напишите псевдокласс, обозначающий ваш составная часть. В следующем примере показан некоторый класс, отклоняющий RN. Вид класс:

Моя реализация очень простого компонента View на стороне ReactJS

import React, { Component } from 'react';

class View_Wrapper extends Component {
  render() {
    return (
      <div style = {this.props.style}>
        {this.props.children}
      </div>
    );
  }
}

export default View_Wrapper;

Моя реализация очень простого компонента View на стороне React-Native

import React, { Component } from 'react';
import { View } from 'react-native';

class View_Wrapper extends Component {
  render() {
    return (
      <View style = {this.props.style}>
        {this.props.children}
      </View>
    );
  }
}

export default View_Wrapper;
  1. Создайте собственный проект для вашего общий код (Создать проект) и предоставьте ему свои написанные компоненты Вид. Это означает, что вы импортируете свой общий код в свой проект React или React-Native и передаете проекту общий код свои компоненты фреймворк.

Моя реализация класса внутри моего проекта общий код, который содержит для меня представление. В этом коде вы можете повторно использовать компонент Вид и написать свой пользовательский интерфейс с помощью этого компонента. Это означает, что в React будет div против того, что React-Native будет содержать View.

let View = undefined;

const registerView = (View) => {
  UIProvider.View = View
};

const getView = () => {
  return UIProvider.View;
};

let UIProvider = {
  View: View
};

//Functions for component registration
UIProvider.registerView = registerView;

//Functions to receive shared components
UIProvider.getView = getView;

export {UIProvider};

Проблемы, которые я преодолел таким образом

  • Ключ к использованию компонентов - разбить все на пустой JavaScript и использовать его в своих проектах React или React-Native. Возможно, это связано с тем, что у меня отсутствовал опыт работы с веб-пакетом, но у меня с этим много проблем. Они были причиной, потому что, если вы создаете приложение React с помощью create-response-app, конфигурация веб-пакета будет сделана за вас, и не так просто разбить вещи до желаемого уровня.

  • Другой момент: вы должны использовать Компоненты высокого порядка для использования ваших компонентов в вашем пакете / библиотеке с общим кодом или что-то еще. Если вы новичок в этом, это может сбивать с толку вначале, но дает вам большую ценность, если вы его используете и понимаете.

Кроме того, чтение

Спасибо за подробный ответ.

anbu selvan 03.05.2018 07:10

Нет проблем :) Это всего лишь небольшой обзор того, что возможно, а что нет, какие проблемы могут возникнуть ... Я работал над этим около 2 недель, и если вы будете следовать инструкциям, вы можете! доступ к общему коду хорошим, многоразовым и поддерживаемым способом.

Jonathan Stellwag 03.05.2018 08:34

Проверь это. React Native для Интернета

Уже используется крупными компаниями, и мне он кажется очень многообещающим. Возможность даже поделиться кодом презентации - это просто потрясающе!

Лучший стек будет реагировать для Интернета и реагировать на мобильные устройства, потому что реагирование использует виртуальный дом, который ускоряет ваш веб-сайт. А когда дело доходит до единой базы кода, оптимизированного размера APK и поддержки сообщества, response-native намного опережает native-script.

Я бы посоветовал выбрать React для Интернета и React Native для мобильных устройств. Это заставляет ваших разработчиков однажды научиться и писать для любой платформы. И я лично не предлагаю единую базу кода для всех платформ, так как это делает вещи беспорядочными. Я бы предпочел поддерживать 3 базы кода для Интернета, Android и IOS (или, по крайней мере, две базы кода для Интернета и мобильных устройств) и делюсь общим кодом.

Вы можете использовать гибридные приложения, чтобы иметь единую базу кода, но помните, что это приложения-оболочки, и поэтому производительность падает.

Вы также можете использовать одну и ту же базу кода для мобильных устройств и Интернета, используя react-native-web.

Я согласен. По крайней мере, 2 кодовые базы. Я видел очень беспорядочные мобильные развертывания с JS-фреймворками, из-за которых клиенты возвращались к (Java / Kotlin) для Android и (Swift / ObjC) для IOS. Для Интернета ... Да, React!

Yo Apps 27.10.2019 21:01

Вы можете создать PWA или использовать React Native Web: https://github.com/necolas/react-native-web

У обоих есть свои взлеты и падения. Но я замечаю, что все больше разработчиков склоняются к React. Однако, поработав с обоими, я посоветую вам внимательно следить за Флаттер. Потому что я считаю, что внешний вид, ощущения и производительность приложения, созданного с использованием Flutter + Dart, имеют преимущество перед обоими. НО, как и я, каждый разработчик только сдерживается, потому что на сегодняшний день их веб-часть все еще находится в стадии бета-тестирования.

Проверьте платформу quasar на предмет единой базы кода для мобильных, веб-приложений, приложений Mac и Windows.

Другие вопросы по теме