Reactjs REACT-使用localstorage更新组件
如何通过从另一个组件更改localstorage来更新组件? 例如,对于react钩子,我想通过更改localstorage值来调用函数,但不起作用:Reactjs REACT-使用localstorage更新组件,reactjs,local-storage,Reactjs,Local Storage,如何通过从另一个组件更改localstorage来更新组件? 例如,对于react钩子,我想通过更改localstorage值来调用函数,但不起作用: React.useEffect(() => { //call a function by changing id value in localstorage }, [localStorage.getItem("id")]) 如果要重新渲染元素,应使用状态。通过使用状态,使用此变量的每个元素都将自动更新。您可以使用
React.useEffect(() => {
//call a function by changing id value in localstorage
}, [localStorage.getItem("id")])
如果要重新渲染元素,应使用状态。通过使用状态,使用此变量的每个元素都将自动更新。您可以使用钩子useState()
如果要重新渲染元素,应使用状态。通过使用状态,使用此变量的每个元素都将自动更新。您可以使用钩子useState()
您可以使用window.addEventListener('storage…
在
示例中
您可以检查id
是否是localStorage
块,使函数运行您可以使用窗口。addEventListener('storage…
在
example
中,您可以检查id
是否是localStorage
部分,以使函数运行您需要使用ContextProvider在不同组件之间共享相同的钩子和数据
import React, { useContext, useEffect, useState } from 'react';
import PropTypes from 'prop-types';
const MyContext = React.createContext();
const useMyHookEffect = (initId) => {
const [id, setId] = useState(initId);
const saveId = (id) => {
window.localStorage.setItem('id', id);
setId(id);
};
useEffect(() => {
const myId = window.localStorage.setItem('id');
setId(myId);
}, []);
return { id, saveId };
};
// Provider component that wraps app and makes themeMode object
export function MyHookProvider({ children, id }) {
const myEffect = useMyHookEffect(id);
return (
<MyContext.Provider value={myEffect}>
{children}
</MyContext.Provider>
);
}
MyHookProvider.defaultProps = {
children: null,
id: null,
};
MyHookProvider.propTypes = {
children: PropTypes.node,
id: PropTypes.string,
};
export const useMyHook = () => useContext(MyContext);
<MyHookProvider>
<ComponentA />
<ComponentB />
</MyHookProvider>
export function ComponentA(){
const { id, saveId } = useMyHook(null);
return (<div>{id}<button onClick={() => saveId(2)}></button></div>);
}
import React,{useContext,useffect,useState}来自'React';
从“道具类型”导入道具类型;
const MyContext=React.createContext();
const useMyHookEffect=(initId)=>{
const[id,setId]=useState(initId);
const saveId=(id)=>{
window.localStorage.setItem('id',id);
setId(id);
};
useffect(()=>{
const myId=window.localStorage.setItem('id');
setId(myId);
}, []);
返回{id,saveId};
};
//包装应用程序并生成MoMode对象的提供程序组件
导出函数MyHookProvider({children,id}){
const myEffect=useMyHookEffect(id);
返回(
{儿童}
);
}
MyHookProvider.defaultProps={
children:null,
id:null,
};
MyHookProvider.propTypes={
子项:PropTypes.node,
id:PropTypes.string,
};
导出const useMyHook=()=>useContext(MyContext);
您需要将其称为组件外部的提供者
import React, { useContext, useEffect, useState } from 'react';
import PropTypes from 'prop-types';
const MyContext = React.createContext();
const useMyHookEffect = (initId) => {
const [id, setId] = useState(initId);
const saveId = (id) => {
window.localStorage.setItem('id', id);
setId(id);
};
useEffect(() => {
const myId = window.localStorage.setItem('id');
setId(myId);
}, []);
return { id, saveId };
};
// Provider component that wraps app and makes themeMode object
export function MyHookProvider({ children, id }) {
const myEffect = useMyHookEffect(id);
return (
<MyContext.Provider value={myEffect}>
{children}
</MyContext.Provider>
);
}
MyHookProvider.defaultProps = {
children: null,
id: null,
};
MyHookProvider.propTypes = {
children: PropTypes.node,
id: PropTypes.string,
};
export const useMyHook = () => useContext(MyContext);
<MyHookProvider>
<ComponentA />
<ComponentB />
</MyHookProvider>
export function ComponentA(){
const { id, saveId } = useMyHook(null);
return (<div>{id}<button onClick={() => saveId(2)}></button></div>);
}
现在您可以在组件之间使用共享挂钩
import React, { useContext, useEffect, useState } from 'react';
import PropTypes from 'prop-types';
const MyContext = React.createContext();
const useMyHookEffect = (initId) => {
const [id, setId] = useState(initId);
const saveId = (id) => {
window.localStorage.setItem('id', id);
setId(id);
};
useEffect(() => {
const myId = window.localStorage.setItem('id');
setId(myId);
}, []);
return { id, saveId };
};
// Provider component that wraps app and makes themeMode object
export function MyHookProvider({ children, id }) {
const myEffect = useMyHookEffect(id);
return (
<MyContext.Provider value={myEffect}>
{children}
</MyContext.Provider>
);
}
MyHookProvider.defaultProps = {
children: null,
id: null,
};
MyHookProvider.propTypes = {
children: PropTypes.node,
id: PropTypes.string,
};
export const useMyHook = () => useContext(MyContext);
<MyHookProvider>
<ComponentA />
<ComponentB />
</MyHookProvider>
export function ComponentA(){
const { id, saveId } = useMyHook(null);
return (<div>{id}<button onClick={() => saveId(2)}></button></div>);
}
导出函数组件a(){
const{id,saveId}=useMyHook(null);
返回({id}saveId(2)}>);
}
您需要使用ContextProvider在不同组件之间共享相同的钩子和数据
import React, { useContext, useEffect, useState } from 'react';
import PropTypes from 'prop-types';
const MyContext = React.createContext();
const useMyHookEffect = (initId) => {
const [id, setId] = useState(initId);
const saveId = (id) => {
window.localStorage.setItem('id', id);
setId(id);
};
useEffect(() => {
const myId = window.localStorage.setItem('id');
setId(myId);
}, []);
return { id, saveId };
};
// Provider component that wraps app and makes themeMode object
export function MyHookProvider({ children, id }) {
const myEffect = useMyHookEffect(id);
return (
<MyContext.Provider value={myEffect}>
{children}
</MyContext.Provider>
);
}
MyHookProvider.defaultProps = {
children: null,
id: null,
};
MyHookProvider.propTypes = {
children: PropTypes.node,
id: PropTypes.string,
};
export const useMyHook = () => useContext(MyContext);
<MyHookProvider>
<ComponentA />
<ComponentB />
</MyHookProvider>
export function ComponentA(){
const { id, saveId } = useMyHook(null);
return (<div>{id}<button onClick={() => saveId(2)}></button></div>);
}
import React,{useContext,useffect,useState}来自'React';
从“道具类型”导入道具类型;
const MyContext=React.createContext();
const useMyHookEffect=(initId)=>{
const[id,setId]=useState(initId);
const saveId=(id)=>{
window.localStorage.setItem('id',id);
setId(id);
};
useffect(()=>{
const myId=window.localStorage.setItem('id');
setId(myId);
}, []);
返回{id,saveId};
};
//包装应用程序并生成MoMode对象的提供程序组件
导出函数MyHookProvider({children,id}){
const myEffect=useMyHookEffect(id);
返回(
{儿童}
);
}
MyHookProvider.defaultProps={
children:null,
id:null,
};
MyHookProvider.propTypes={
子项:PropTypes.node,
id:PropTypes.string,
};
导出const useMyHook=()=>useContext(MyContext);
您需要将其称为组件外部的提供者
import React, { useContext, useEffect, useState } from 'react';
import PropTypes from 'prop-types';
const MyContext = React.createContext();
const useMyHookEffect = (initId) => {
const [id, setId] = useState(initId);
const saveId = (id) => {
window.localStorage.setItem('id', id);
setId(id);
};
useEffect(() => {
const myId = window.localStorage.setItem('id');
setId(myId);
}, []);
return { id, saveId };
};
// Provider component that wraps app and makes themeMode object
export function MyHookProvider({ children, id }) {
const myEffect = useMyHookEffect(id);
return (
<MyContext.Provider value={myEffect}>
{children}
</MyContext.Provider>
);
}
MyHookProvider.defaultProps = {
children: null,
id: null,
};
MyHookProvider.propTypes = {
children: PropTypes.node,
id: PropTypes.string,
};
export const useMyHook = () => useContext(MyContext);
<MyHookProvider>
<ComponentA />
<ComponentB />
</MyHookProvider>
export function ComponentA(){
const { id, saveId } = useMyHook(null);
return (<div>{id}<button onClick={() => saveId(2)}></button></div>);
}
现在您可以在组件之间使用共享挂钩
import React, { useContext, useEffect, useState } from 'react';
import PropTypes from 'prop-types';
const MyContext = React.createContext();
const useMyHookEffect = (initId) => {
const [id, setId] = useState(initId);
const saveId = (id) => {
window.localStorage.setItem('id', id);
setId(id);
};
useEffect(() => {
const myId = window.localStorage.setItem('id');
setId(myId);
}, []);
return { id, saveId };
};
// Provider component that wraps app and makes themeMode object
export function MyHookProvider({ children, id }) {
const myEffect = useMyHookEffect(id);
return (
<MyContext.Provider value={myEffect}>
{children}
</MyContext.Provider>
);
}
MyHookProvider.defaultProps = {
children: null,
id: null,
};
MyHookProvider.propTypes = {
children: PropTypes.node,
id: PropTypes.string,
};
export const useMyHook = () => useContext(MyContext);
<MyHookProvider>
<ComponentA />
<ComponentB />
</MyHookProvider>
export function ComponentA(){
const { id, saveId } = useMyHook(null);
return (<div>{id}<button onClick={() => saveId(2)}></button></div>);
}
导出函数组件a(){
const{id,saveId}=useMyHook(null);
返回({id}saveId(2)}>);
}
谢谢,但我必须从react外部向react组件发送一个值。如何在react外部的上下文中设置_id_?您可以从钩子中导出函数。我已经更新了它。@s.d.fardThanks,但我必须从react外部向react组件发送一个值。如何在react外部的上下文中设置_id_?您可以导出函数我已经更新了它。@s.d.fardThanks,但对我不起作用React.useffect(()=>{window.addEventListener('storage',(e)=>console.log(“EVENT FIRED”)},[])
你可以改为window.onstorage=()=>
,虽然这很奇怪,因为你的代码看起来像是谢谢,但对我不起作用React.useffect(()=>{window.addEventListener('storage',(e)=>console.log(“EVENT-FIRED”)},[])
你可以试试window.onstorage=()=>
,尽管这很奇怪,但是你的代码看起来像