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

我的第一个聊天应用完全使用 React Hooks 构建,感觉很棒。DEV 的全球项目展示挑战赛(由 Mux 主办):快来展示你的项目吧!

我完全使用 React Hooks 构建了我的第一个聊天应用。感觉很棒。

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

React Hooks 是simple……无论你想到哪些形容词来描述你最喜欢的应用程序状态管理工具(redux、mobx),肯定不会包括它simple

我曾使用过几种 AppState 工具:几年前,我用 Redux Saga 构建了一个完整的网站。对于一个之前从事后端开发的人来说,学习曲线非常陡峭。一旦你理解了 Saga、Action、Reducers 和 Store 的实现方式,就可以轻松地通过非纯 Action 调用 API 并刷新 UI。之后,我尝试了一段时间 Baobab 的分支功能,发现它在易用性方面有所改进。我的下一个项目相当简单,所以我很幸运地完全避免了任何状态管理。这很有趣,也让我耳目一新frontend wilderness

几个月前,我决定启动一个副业项目。React Hooks 是一项很酷的新技术,读了他们的介绍文章以及它所承诺的功能后,我立刻就被吸引住了。事实证明,它确实做到了。现在从端点获取数据并将其显示在 UI 上变得如此简单,真是太棒了。

import React, {useState} from 'react';

const Login = () => {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');
  const [loading, setLoading] = useState(false);
  const [loginError, setLoginError] = useState('');

  let errorLabel;
  if (loginError) {
    errorLabel = <Help isColor="white">{loginError} </Help>;
  }
}

这段代码足以存储表单中的邮箱和密码,将其发送到指定端点,并在出现错误时进行错误处理。它的简洁性令我惊叹,我非常喜欢。

随着我的代码某些部分变得越来越复杂,Hooks 始终坚守岗位,不负众望。useEffect()它为 Hooks 扩展了一个强大的 API,你可以对调用进行条件判断,提供调用逻辑所需的额外变量,最后还可以设置简单状态的值。示例如下:


  const [newMessage, setNewMessage] = useState('');
  const [post, setPost] = useState(false);
  useEffect(() => {
    async function postMessage() {
      const response = await postNewMessage(
        newMessage,
        props.match.params.id,
        userSession.token,
      );
      if (response.status === 200) {
        setReloadPage(true);
      } else if (response.status === 422) {
        setErrorJoining('Please write something');
      }
    }
    if (post) {
      postMessage();
    }
    setNewMessage('');
    setPost(false);
  }, [post, props.match.params.id, userSession.token]);

代码依然清晰易读,而且通过在第二个参数中提供变量,可以确保对变量的任何更改都会再次触发钩子。这样一来,useEffect()我几乎忘记了组件生命周期的存在,而且几乎没有任何妥协。

这个网页应用虽然不复杂,但目前的使用体验非常棒。(你可以在这里测试:https ://beta.nicetalks.co/ )
我非常感谢 React 团队发布了 Hooks。它们让创建网页应用再次变得如此简单直接。我强烈推荐大家现在就开始使用 Hooks 来开发任何项目。

文章来源:https://dev.to/mgranados/built-my-first-chat-app-with-react-hooks-exclusively-it-was-great-14dj