Reactjs 在util文件中使用react cookie
我正在我的react/redux应用程序中使用react cookie v2。要设置cookie,您需要使用cookies(component)将组件包装在HOCReactjs 在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,
中,然后可以使用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);
};