首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RecoilJS通过API发布数据

使用RecoilJS通过API发布数据
EN

Stack Overflow用户
提问于 2020-07-10 10:17:45
回答 1查看 1.6K关注 0票数 3

RecoilJS文档中,有一个示例如何处理异步数据查询,但它只涉及get数据。

假设我有一个简单的状态:

代码语言:javascript
复制
const accountState = atom({
  key: "accountState",
  default: {
    id: "",
    name: "",
  }
});

以及作为登记表的组件:

代码语言:javascript
复制
const RegisterForm = () => {
  return (
    <form>
      <input type="text" name="username" />
      <button type="submit">Register</button>
    </form>
  )
}

发布的数据在FormData中。成功创建新帐户后,服务器将发送包含帐户的idname的响应。

代码语言:javascript
复制
{
  "id": "abcdef123456",
  "name": "example"
}

此响应数据将设置为accountState的新状态。

如何在RecoilJS中处理该过程

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-11 04:01:06

您只需处理http请求并将响应设置为状态。

代码语言:javascript
复制
const RegisterForm = () => {
  const [account, setAccount] = useRecoilState(accountState);

  const handleSubmit = async e => {
    e.preventDefault();

    const response = await fetch(url, {
      method: 'POST',
      body: data,
    });

    const responseJson = await response.json();
    setAccount(responseJson);
  };

  return (
    <form onSubmit={handleSubmit}>
      <input type="text" name="username" />
      <button type="submit">Register</button>
    </form>
  );
}

编辑

为了具有可重用的方法,我建议为经常使用而构建自定义钩子。

代码语言:javascript
复制
const useRegister = () => {
  const setAccount = useSetRecoilState(accountState);

  const register = useCallback(async (username)=> {
    const response = await fetch(url, {
      method: 'POST',
      body: { username },
    });

    const responseJson = await response.json();
    setAccount(responseJson);
  }, [setAccount]);

  return register;

}

const RegisterForm = () => {
  const register = useRegister();

  const handleSubmit = async e => {
    e.preventDefault();

    await register(username);
  };

  return (
    <form onSubmit={handleSubmit}>
      <input type="text" name="username" />
      <button type="submit">Register</button>
    </form>
  );
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62832167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档