【问题标题】:Passing a function from Context to a component to update state in context将函数从上下文传递给组件以更新上下文中的状态
【发布时间】:2020-01-10 04:36:32
【问题描述】:

我在将上下文中的状态设置为组件的上下文中传递函数时遇到问题。当我控制台记录它时,该函数返回未定义,但是当我控制台记录它们时,上下文中的所有其他内容都会显示出来。它应该从 Header 组件更新我的上下文中的“显示”状态。我试过寻找堆栈溢出的解决方案,但到目前为止没有任何效果。 https://codesandbox.io/s/github/joeyjr95/max-kaplan-portfolio/tree/master/?fontsize=14&hidenavigation=1&theme=dark

【问题讨论】:

标签: javascript reactjs


【解决方案1】:

索引中有一个微小的语法错误。这就是索引的外观。看看 PortProvider。

ReactDOM.render(
  <BrowserRouter>
    <PortProvider>
    <App />
    </PortProvider>
  </BrowserRouter>,
  document.getElementById("root"),
  console.log(PortProvider)
);

原文:

import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App/App";
import { BrowserRouter } from "react-router-dom";
import { PortProvider } from "./Context/Context";

ReactDOM.render(
  <BrowserRouter>
    <PortProvider/>
    <App />
    <PortProvider/>
  </BrowserRouter>,
  document.getElementById("root"),
  console.log(PortProvider)
);

【讨论】:

  • 这也是我指出的。但我认为由此。上下文应该是未定义的。
  • 您仍然应该查看我的答案中的代码。将 setDisplay 逻辑简化为单个语句,渲染中的值对象完全不需要,因为它是状态的副本。欢迎。
【解决方案2】:

一些小问题,index.js 中的错字自动关闭&lt;Provider/&gt; 和无用的默认值,因为它被状态替换。将菜单 &lt;a&gt; 更改为 &lt;div&gt;。优化setDisplay,也将其传递为toggle,然后在需要的地方使用。

<PortContext.Provider value={{ ...this.state, toggle: this.setDisplay }}>
    {this.props.children}
</PortContext.Provider>

Fixed Code Sandbox

【讨论】:

  • 当我这样做时,我得到这个错误:``` Line 161:36: Parsing error: Unexpected token 159 | // }; 160 |返回(> 161 | | ^ 162 | {this.props.children} 163 | 164 | ); ```
  • 这是一个 systax error message ,请注意任何语法错误。
  • 嗨,我只是注意到您的值对象在关闭后缺少'。因此会导致语法错误。
猜你喜欢
  • 1970-01-01
  • 2015-04-29
  • 2018-01-23
  • 2020-04-02
  • 2019-01-07
  • 1970-01-01
  • 2022-01-22
  • 2016-04-30
  • 2023-04-02
相关资源
最近更新 更多