В последние несколько лет фреймворки JavaScript становятся все более популярными. Есть много вариантов на выбор, но каковы различия между основными игроками?

Введение

Svelte.js — это фреймворк javascript, который можно использовать для ускорения процесса разработки и повышения его эффективности. Изначально этот фреймворк был создан для того, чтобы разработчики могли создавать приложения с меньшим количеством ошибок и использовать меньше кода.

Svelte.js против React против Vue

Svelte.js — это облегченная среда JavaScript, которая компилирует эффективные одноразовые компоненты. Он был разработан с целью сделать веб-разработку более продуктивной и приятной, сосредоточив внимание на современном рабочем процессе без ущерба для производительности.

React — это библиотека с открытым исходным кодом для создания пользовательских интерфейсов, разработанная Facebook. Чаще всего он используется в качестве уровня представления в приложениях MVC, но его также можно использовать как отдельную библиотеку для других целей.

Vue — это прогрессивная платформа для создания пользовательских интерфейсов, обеспечивающая реактивность на основе данных, компонуемые компоненты и директивы с простым в использовании API и оптимизированной производительностью.

Давайте сравним их кодовую базу, создав простое приложение todo:

Реагировать на js

import { useEffect, useRef, useState } from 'react';
import './App.css';
function App() {
// State
const [todos, setTodos] = useState([]);
// Binding
const todoText = useRef();
// Side Effects / Lifecycle
useEffect(() => {
const existingTodos = localStorage.getItem('todos');
setTodos(existingTodos ? JSON.parse(existingTodos) : []);
}, []);
// Events
function addTodo(event) {
event.preventDefault();
const next = [...todos, todoText.current.value];
setTodos(next);
localStorage.setItem('todos', JSON.stringify(next));
}
return (
<div>
    <ul>
        {todos.map(todo => (<li key={todo}>{todo}</li>))}
    </ul>
    <form onSubmit={addTodo}>
        <input type="text" placeholder="What needs to be done?" ref={todoText} />
        <input type="submit" value="Add Todo" />
    </form>
</div>
);
}
export default App;

Вью js

<template>
    <div>
        <ul>
            <li v-for="todo in todos" v-bind:key="todo">{{ todo }}</li>
        </ul>
        <form v-on:submit.prevent="addTodo">
            <input v-model="todoText" placeholder="What needs to be done?">
            <button type="submit">Add Todo</button>
        </form>
    </div>
</template>
<script>
    export default {
        name: "HelloWorld",
        data() {
            return {
                todos: [],
                todoText: '',
            };
        },
        methods: {
            addTodo() {
                this.todos = [...this.todos, this.todoText];
                localStorage.setItem('todos', JSON.stringify(this.todos));
            },
        },
        mounted() {
            const existingTodos = localStorage.getItem('todos');
            this.todos = JSON.parse(existingTodos) || [];
        }
    };
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>

Svlete js

<script>
	import { onMount } from 'svelte';
	let todos = [];
	let todoText = '';
	onMount(() => {
		const existingTodos = localStorage.getItem('todos');
    	todos = JSON.parse(existingTodos) || [];
	});
	function addTodo() {
		todos = [...todos, todoText];
    	localStorage.setItem('todos', JSON.stringify(todos));
	}
</script>
<main>
	<ul>
		{#each todos as todo}
			<li>{todo}</li>
		{/each}
	</ul>
	<form on:submit|preventDefault={addTodo}>
	
		<input bind:value={todoText} placeholder="What needs to be done?">
		<input type="submit" value="Add todo">
	</form>
</main>

Стоит ли Свелте того?

Если вы хотите создать приложение, которое быстро загружается и хорошо работает на недорогих устройствах, или если вы хотите создать приложение, которое легко поддерживать и понимать, а также оно обладает высокой производительностью, то Svelte — правильный выбор для вас.

Спасибо.