You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React.js中使用react-cookie获取Cookie?

如何在React.js中借助react-cookie库获取Cookie?

我来给你一步步讲清楚怎么操作,不管你用类组件还是函数组件都能搞定~

第一步:先安装react-cookie库

首先得把这个库装到你的项目里,用npm或者yarn都行:

npm install react-cookie
# 或者用yarn
yarn add react-cookie

类组件写法(官方示例详解)

官方给的类组件示例我给你拆解一下关键点,方便你理解:

import React, { Component } from 'react';
import { instanceOf } from 'prop-types';
import { withCookies, Cookies } from 'react-cookie';
import NameForm from './NameForm';

class App extends Component {
  // 先给props做类型校验,确保cookies是必填的Cookies实例
  static propTypes = {
    cookies: instanceOf(Cookies).isRequired
  };

  componentWillMount() {
    // 从props里拿到cookies对象
    const { cookies } = this.props;
    // 用cookies.get()获取名为'name'的Cookie,要是不存在就用默认值'Ben'
    this.state = { name: cookies.get('name') || 'Ben' };
  }

  handleNameChange(name) {
    const { cookies } = this.props;
    // 顺便提下设置Cookie的写法,第三个参数是配置项,比如过期时间、生效路径这些
    cookies.set('name', name, { path: '/' });
    this.setState({ name });
  }

  render() {
    return <NameForm name={this.state.name} onNameChange={this.handleNameChange.bind(this)} />;
  }
}

// 一定要用withCookies高阶组件包裹你的组件,这样cookies才会被注入到props里
export default withCookies(App);

这里最核心的就是**withCookies高阶组件**,它会把cookies实例作为props传递给你的组件,之后你就能用cookies.get('cookie名称')来获取对应的Cookie值了。

函数组件写法(更适合现代React)

如果你的项目用的是函数组件+Hook,那用useCookies钩子会更简洁:

import React from 'react';
import { useCookies } from 'react-cookie';
import NameForm from './NameForm';

function App() {
  // 调用useCookies钩子,传入要关注的Cookie名称数组,拿到cookies对象和设置Cookie的方法
  const [cookies, setCookie] = useCookies(['name']);

  // 直接通过cookies.name获取Cookie值,不存在的话可以给默认值
  const userName = cookies.name || 'Ben';

  const handleNameChange = (name) => {
    setCookie('name', name, { path: '/' });
  };

  return <NameForm name={userName} onNameChange={handleNameChange} />;
}

export default App;

这种写法不用处理高阶组件,直接用Hook就能拿到Cookie,代码清爽很多~

小提示

不管是类组件还是函数组件,cookies.get()方法都可以传第二个参数作为默认值,比如cookies.get('name', { defaultValue: 'Ben' }),和||的效果类似,但写法更规范。

内容的提问来源于stack exchange,提问作者Amber Normand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:09:58