Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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 REACT-使用localstorage更新组件_Reactjs_Local Storage - Fatal编程技术网

Reactjs 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")]) 如果要重新渲染元素,应使用状态。通过使用状态,使用此变量的每个元素都将自动更新。您可以使用

如何通过从另一个组件更改localstorage来更新组件? 例如,对于react钩子,我想通过更改localstorage值来调用函数,但不起作用:

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=()=>
,尽管这很奇怪,但是你的代码看起来像