reactjs - 在反应中将动态值传递给 HOC
问题描述
我写了一些 HOC,我需要将我在某个生命周期级别创建的动态对象传递给这个 HOC,但我没有将他作为道具。如果我尝试传递一些静态值(例如从开始初始化 myObj),它会按预期工作并且我得到正确的值。
假设这是我的组件类:
let myObj = {};
class Test extends React.Component
{
constructor(props) {
super(props);
.....
}
render() {
myObj = {test:'test'};
return ( ... )
}
}
export default withHOC(Test, myObj);
这是我的 HOC:
const withHOC = (Component, test) => {
class Hoc extends React.Component
{
constructor(props)
{
super(props);
const s = test; // ---->test is empty object always !!
...
}
}
return Hoc;
}
我在“测试”类上创建的“动态”对象在我的 HOC 类上始终为空。当我尝试直接从我的道具传递一些值时也会发生这种情况,在这种情况下页面被卡住(控制台中没有错误)。
有人知道如何解决这个问题吗?谢谢!
解决方案
当您以这种方式组合组件时,组合只发生在编译时(静态组合)。这意味着 withHOC 只运行一次并且接收一个空myObj
参数,因为它使用的是在声明中定义的参数。
export default withHOC(Test, myObj); //myObj = {}
如果您希望该值是动态的,withHOC
则应在该值更改时运行组合。
您无法将数据从WrappedComponent
(Test) 发送到HOC
(withHOC),因此即使您更改中的myObj
值Test.render
,HOC 也永远不会知道。
如果你真的需要的话,你能做的就是在Test.render
render(){
const Hoc = withHOC(this.state.myObj, WrappedComponent);//WrappedComponent can be anything
return(
<Hoc/>
)
}
这样,每次组件渲染时,Hoc
都使用myObj
组件状态中的值来组合,这不是最好的方法,因为 this.state.myObj 可能具有与前一次渲染时相同的值,并且您将使用与以前相同的数据重新组合。
更好的方法是检查 myObj at 中的更改Test.componentDidUpdate
,如果确实发生了更改,则Hoc
再次编写。
推荐阅读
- python - 如何在python中使用for循环创建列数增加的数据框?
- python - 如何将具有异常尺寸的 netCDF 转换为标准的 netCDF(ltime、lat、lon)(python)
- java - Java 代理抛出 NullPointerException
- javascript - 单击按钮时解决方法内部的承诺
- typescript - 为什么 ES5 目标不会将所有内容转换为 ES5 兼容代码?
- sql - Couchbase N1QL - 内联正则表达式捕获组替换?
- html - 如何使用 CSS 更改图标属性大小?
- python - 是什么导致了这个错误,如何解决?
- r - 如何格式化图形大小以更好地可视化?
- sql - 在 BigQuery 中获取 DISTINCT 日期的 DISTINCT ID?