Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在util文件中使用react cookie_Reactjs_Cookies_React Universal - Fatal编程技术网

Reactjs 在util文件中使用react cookie

Reactjs 在util文件中使用react cookie,reactjs,cookies,react-universal,Reactjs,Cookies,React Universal,我正在我的react/redux应用程序中使用react cookie v2。要设置cookie,您需要使用cookies(component)将组件包装在HOC中,然后可以使用this.props.cookies.set('first\u cookie',someCookie)设置cookie 但是,我想在一个util文件中设置cookie,我的所有组件都可以使用该文件来设置cookie。比如说 storageUtil.js export const setToCookies = (key,

我正在我的react/redux应用程序中使用react cookie v2。要设置cookie,您需要使用cookies(component)将组件包装在HOC
中,然后可以使用
this.props.cookies.set('first\u cookie',someCookie)
设置cookie

但是,我想在一个util文件中设置cookie,我的所有组件都可以使用该文件来设置cookie。比如说

storageUtil.js
export const setToCookies = (key, value, options) => {
    cookies.set(key, value, options);
};
此util文件不能用
withCookies
包装,因此不能直接使用cookies。 我可以从using组件(
setToCookies(cookiesInstance,key,value,options)
)传入cookies实例,但如果可能的话,我宁愿在util文件中导入cookie实例


这必须是一个非常常见的用例(处理util文件中的cookies),我只是不知道最好的方法

我将写下搜索通用解决方案时发现有效的两种方法。如果提供更好的解决方案,我将更改已接受的答案

解决方案1:

withCustomCookies.js

import React from 'react';
import { withCookies } from 'react-cookie';

export function withCustomCookies(Component) {

    return (props) => {
        // CookieComponent needs a capital letter bc of JSX
        let ExtendedCookieComponent = withCookies(withEncapsulatedCookies(Component));

        return (
            <ExtendedCookieComponent
                {...props} />
        );
    };
}

export function withEncapsulatedCookies(Component) {

    return (props) => {
        // Only expose our own cookies methods defined in this scope
        const {
            // Dont expose cookies in using component
            cookies, // eslint-disable-line no-unused-vars
            ...cleanedProps
        } = props;

        function getFromCookies(key) {
            // Stuff to always do when getting a cookie
            return cookies.get(key);
        }

        function setToCookies(key, value, options) {
            // Stuff to always do when setting a cookie
            cookies.set(key, value, options);
        }

        return (
            <Component
                getFromCookies={getFromCookies}
                setToCookies={setToCookies}
                {...cleanedProps} /> // All Props except for cookies
        );
    };
}
用作:

  • 在组件中导入setToCookies并在组件上使用withCookies(
    withCookies(组件名称)
  • 使用组件中的方法作为
    setToCookies(this.props.cookies、key、value、options)
  • cookieUtils.js
    export const setToCookies = (cookies, key, value, options) => {
       // Stuff to always do when setting a cookie
       cookies.setCookie(key, value, options);
    };