发布于 2026-01-06 0 阅读
0

Redux vs. React Context API vs. AppRun HTML 主程序 组件 结论 AppRun

Redux、React Context API 和 AppRun 的对比

HTML

主要程序

组成部分

结论

应用程序运行建造 NPM 版本 下载 执照 叽叽喳喳 Discord聊天

最近,我读到一篇很棒的文章,标题是《Redux vs. React Context API》。这正是我喜欢的那种文章类型。它用一个简单的例子解释了背后的概念。这个例子看似简单,却能让我们毫无干扰地理解其中的原理。读了几分钟后,我就掌握了 Redux 和 Context API,并开始思考如果把同样的东西应用到AppRun应用中会怎么样。于是,我立即在 glitch.com 上创建了同样的示例。

应用程序运行示例

您可以在 glitch.com 上观看实时演示:https://apprun-state-2-components.glitch.me

我将描述 AppRun 的思路,以帮助您理解并将其与 Redux 和 Context API 进行比较。

HTML

HTML 代码包含了网站结构。

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <title>AppRun</title>
</head>
<body>
  <div id="root">
    <div class="app">
      <div class="nav" id="user-avatar">
      </div>
      <div class="body">
        <div class="sidebar">
          <div class="user-stats" id="user-stats">
          </div>
        </div>
        <div class="content">main content here</div>
      </div>
    </div>
  </div>
  <script src="main.tsx"></script>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

您可以看到我们主要使用 HTML,不需要组件结构。

// No need
<App>
  <Nav>
    <UserAvatar />
  </Nav>
  <Body>
    <Sidebar>
      <UserStats />
    </Sidebar>
  </Body>
</App>
Enter fullscreen mode Exit fullscreen mode

由于我们不受组件结构的限制,因此我们利用 HTML 并将组件挂载到 HTML 元素上。

主要程序

在 AppRun 应用程序中,我们将组件挂载到 HTML 元素。

import './style.css';

import app from 'apprun';

import UserAvatar from './UserAvatar';
import UserStats from './UserStats';

new UserAvatar().mount('user-avatar');
new UserStats().mount('user-stats');

app.run('/set-user', {
  avatar: "https://github.com/yysun/apprun/blob/master/logo.png?raw=true",
  name: "AppRun",
  followers: 1234,
  following: 123
});
Enter fullscreen mode Exit fullscreen mode

我们只需要两个组件 <UserAvatar/> 和 <UserStats/>。我们将它们分别挂载到 id 为 'user-avatar' 和 'user-stats' 的 <div> 元素上。

然后我们发布一个 AppRun 事件“/set-user”,并将用户数据作为事件参数。

组成部分

组件会订阅并处理 AppRun 事件。它们从事件参数中获取用户数据,并创建一个新的组件状态。然后,AppRun 会使用新状态调用视图函数。视图函数使用 JSX 创建虚拟 DOM。最后,AppRun 渲染该 DOM。

用户头像组件

UserAvatar 组件用于显示头像图片。状态变量为头像 URL。

import app, {Component} from 'apprun';

export default class extends Component {
  state = '';

  view = (state) => <img className="user-avatar small" alt="user avatar" src={state} />;

  update = {
    '/set-user': (_, user) => user.avatar,
  }
}
Enter fullscreen mode Exit fullscreen mode

用户统计组件

UserStats 组件显示用户的头像、姓名和其他信息。状态是用户对象。

import app, {Component} from 'apprun';

export default class extends Component {
  state = {} ;

  view = (user) => <>
    <div>
      <img className="user-avatar " alt="user avatar" src={user.avatar}/>
      {user.name}
    </div>
    <div className="stats">
      <div>{user.followers} Followers</div>
      <div>Following {user.following}</div>
    </div>
  </>;

  update = {
    '/set-user': (_, user) => user,
  }
}
Enter fullscreen mode Exit fullscreen mode

AppRun 支持JSX 片段。我们可以创建一个没有根元素的元素列表来进行分组。该元素列表会被插入到组件挂载的元素中。这有助于我们进行微调,并获得完美的 HTML 结构。

就这样。

结论

AppRun应用之所以更易于使用和操作,主要归功于两点改进。一是我们可以将组件挂载到元素上;二是我们使用事件来传递数据并触发一系列流程,包括更新组件状态和渲染 DOM。

您可以在 glitch.com 上重新混音此示例。https ://glitch.com/edit/#!/ remix/apprun-state-2-components

有关 AppRun 的更多信息,请访问:

GitHub 标志 yysun / apprun

AppRun 是一个 JavaScript 库,用于使用受 Elm 启发的架构、事件和组件开发高性能、高可靠性的 Web 应用程序。

应用程序运行建造 NPM 版本 下载 执照 叽叽喳喳 Discord聊天

介绍

AppRun 是一个轻量级的框架和库替代方案。它拥有独特的架构,其灵感源自 Elm 架构,可以帮助您管理 Web 应用程序的状态、路由和其他关键方面。

计数器为例。

// define the initial state
const state = 0;
// view is a function to display the state (JSX)
const view = state => <div>
  <h1>{state}</h1>
  <button onclick="app.run('-1')">-1</button>
  <button onclick="app.run('+1')">+1</button>
</div>;

// update is a collection of event handlers
const update = {
  '+1': state => state + 1,
  '-1': state => state - 1
};

// start the app
app.start(document.body, state
Enter fullscreen mode Exit fullscreen mode

尽情享受编程的乐趣,并提交 PR。

文章来源:https://dev.to/yysun/redux-vs-the-react-context-api-vs-apprun-2knm