javascript - 在 react 中的两个组件之间共享数据。无亲子关系

标签 javascript reactjs react-redux react-hooks react-context

我有 2 component在 react 。对于前Producer.jsConsumer.js. 。没有parent child他们之间的关系。

我需要在 Producer.js 中设置一个变量并在 Consumer.js 中消耗该值

我在谷歌中搜索并尝试使用 context API但它不起作用。我是新人,所以无法解决这个问题。

所以在 producer.js .

 const Name = createContext(false);
  const [isActive,setIsActive]=useState(false);
  <Name.Provider value={isActive}>
            </Name.Provider>

在consumer.js中我试图消费isActive .

  <Name.Consumer value={isActive}>
        alert(isActive);
    </Name.Consumer>

它没有编译。

它甚至无法识别isActivevalueConsumer.js 。我做错了什么? 如果有更好的方法也可以提出来。

编辑:-1 我实际上在“菜单”选项卡中有 2 个组件。 用户和 存货。 如果值为 true,我需要显示 User,否则不应显示。

<span >
          <Link to="Inventory">List of Inventory</Link>
 </span>
 <span>
         <Link to="user">List of User</Link>
 </span>

我要<Link to="user"> User</Link>当值为 true 时显示。否则应该是假的。

 <Name.Consumer>
    {value => 
        
      <span className="badge badge-white">
    { value && <Link to="user"> List of Users</Link> }
    </span>
    }
    </Name.Consumer>

.

List of Users显示值是否为 true 的选项卡的false 。如何修改代码?

最佳答案

消费者不会像 prop 那样访问上下文值,而是作为子函数组件进行访问:

Context.Consumer

<MyContext.Consumer>
  {value => /* render something based on the context value */}
</MyContext.Consumer>

对于您的消费者示例,它看起来类似于以下内容:

<Name.Consumer>
  {value => {
    console.log(value);
    return value ? "Active": "Inactive";
  }}
</Name.Consumer>

现在在函数组件中使用 useContext Hook 更为常见。示例:

const isActive = useContext(Name);

useEffect(() => {
  console.log(isActive);
}, [isActive]);

return isActive ? "Active": "Inactive"

关于javascript - 在 react 中的两个组件之间共享数据。无亲子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71232687/

相关文章:

reactjs - CombineReducers with Typescript 返回错误 "Argument of type is not assignable to parameter of type ' ReducersMapObject'"

internet-explorer - 将 redux 存储传递到新窗口在 IE 中不起作用

javascript - 为什么 jQuery append() 会删除字符串中第一个空格后的单词

javascript - PHP 图像上传后更新 HTML 中图像标签的 SRC

javascript - 无法安装 jspdf 1.5.3

reactjs - 故事书迁移到 CSF 的 Typescript 问题

reactjs - 热重载无法与 React-Redux 和 Hooks 一起正常工作

javascript - 在 innerHTML 中调用一个函数

javascript - 如何使用 Jquery 改变 li 的位置

javascript - 如何在reactjs中手动触发dom上的点击事件