Единая кодовая база для мобильных и веб - PullRequest
0 голосов
/ 02 мая 2018

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

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

Ответы [ 5 ]

0 голосов
/ 27 августа 2018

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

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

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

0 голосов
/ 22 мая 2018

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

0 голосов
/ 02 мая 2018

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

UI

Обе платформы используют один и тот же синтаксис для описания пользовательского интерфейса (JSX). Если вы углубитесь в детали, вы увидите, что есть несколько отличий. (ReactJS: <div/> || React-Native: <View/>). Таким образом, в вашей архитектуре всегда будет часть, специфичная для фреймворка, но вы можете использовать возможности JSX для обеспечения поддержки таких компонентов, как стили, данные или даже функции.

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

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

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

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

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

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

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 side

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. Создайте собственный проект для вашего shared-кода ( Создайте проект ) и предоставьте в него свои письменные View компоненты. Это означает, что вы импортируете свой общий код в свой проект React или React-Native и даете проекту shared-code свой специфичный для фреймворка компонент.

Моя реализация класса внутри моего проекта shared-code , который поддерживает мое представление. В этом коде вы можете повторно использовать компонент View и написать свой интерфейс с этим компонентом. Это означает, что в 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-реакции-приложения, то конфигурация веб-пакета сделана для вас, и разбить вещи до уровня, который они хотят, не так просто.

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

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

0 голосов
/ 22 мая 2018

Проверьте это. React Native для Web

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

0 голосов
/ 02 мая 2018

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

Некоторые опции:

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