【发布时间】:2020-03-10 15:56:02
【问题描述】:
是否可以在代码中创建一个新组件,而不是在 dom 中放置一个 react 组件,就像创建一个新的 javascript 对象一样?
import * as React from "react";
import Nodetest from "./nodetest";
export default function App() {
const makeNewNode = () => {
const NewNode = new Nodetest();
NewNode.makelog();
};
return <button onClick={makeNewNode}>Make New node</button>;
}
Nodetest 返回 null 但不允许我调用 useContext 挂钩。
import { Component, useContext } from "react";
import { Dispatch, DRAW } from "./global";
class Nodetest extends Component {
test: string;
dispatch: any;
constructor() {
super();
this.test = "hello";
this.dispatch = useContext(Dispatch);
}
makelog = () => {
this.dispatch({ type: DRAW, value: Date.now() });
console.log("new log");
};
render() {
return null;
}
}
export { Nodetest };
更新
我在这里创建了一个沙盒https://codesandbox.io/s/eager-wiles-0h2uz 但super() 给出了错误index.d.ts(449, 21): An argument for 'props' was not provided. 并单击按钮导致Invalid hook call. Hooks can only be called inside of the body of a function component
【问题讨论】:
-
您的问题是什么?
Nodetest只是一个函数,为什么你这里有new?我认为您打算将其设为一个类,这样您就可以在其上公开方法 -
我希望 nodeTest 类似于 javascript 类,但仍然能够使用上下文挂钩
-
为什么不直接使用自定义挂钩?
-
不,这是不可能的,你不能在未“渲染”的组件中使用钩子,这意味着从 jsx 转换为它们的原生形式
React.createElement(Nodetest ... -
这似乎是一个 XY 问题。
标签: reactjs