【问题标题】:ReactJS Functional Component "this" keyword problemReactJS 函数式组件“this”关键字问题
【发布时间】:2021-09-30 10:26:28
【问题描述】:

我搜索了类似的问题,但没有一个能解决我的疑问。在这种情况下,如何将“this”更改为反应功能组件:<SimpleStorage parent={this}/>,其中该组件属于一个库(称为 react-simple-storage)并编写在功能组件内。 我看到的所有示例都涉及this.statethis.objectthis.function,但没有一个是关于this 单独的。

const Books = () => { 
...  
return <Router>  
            <SimpleStorage parent={this}/> 
            <Routes/>
       </Router>

当我尝试以这种方式运行时,他运行但控制台抛出:

No "parent" prop was provided to react-simple-storage. A parent component's context is required in order to access and update the parent component's state.
            
Try the following: <SimpleStorage parent={this} />

如何设置功能组件的组件状态?我必须在父组件中实例化一个变量吗?有什么可以做的吗?

【问题讨论】:

  • Books 是一个函数组件,它使用箭头函数。箭头函数没有自己的this
  • 不要将 function 组件与 functional 编程混淆;它们是非常不同的东西。
  • 看起来那个库刚刚过时,有一个废弃的 PR 来支持基于函数的组件:github.com/ryanjyost/react-simple-storage/pull/30

标签: javascript reactjs react-hooks react-functional-component


【解决方案1】:

此库旨在与类组件一起使用,因此最好使用该类型的组件。

但是,如果查看 lib 的源代码,您会发现 parent 使用了两个 props:statesetState,因此您可以创建一个状态容器来保存所有功能组件状态:

const [state, setState] = useState(initState);

然后将其传递给:

<SimpleStorage parent={{state, setState}} />

【讨论】:

  • setState from useState 的行为与类组件中的setState 不同,因此这也可能不起作用
  • 好的!我试试,谢谢你的快速回复!如果它有效,我会把你的标记为答案
  • 哦,我应该只是在“书籍”中创建一个钩子,然后像你说的那样发送它?
猜你喜欢
  • 2021-10-12
  • 2019-05-26
  • 1970-01-01
  • 2017-10-25
  • 2011-12-11
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多