1

似乎 path.insertAfter()、path.insertBefore()、path.unshiftContainer() 和 path.pushContainer() 仅适用于 Statements。如何插入不是语句的节点?

就我而言,我正在编写一个 babel jsx 插件,并且我正在尝试插入一个兄弟节点,它是一个 JSXExpressionContainer。当我这样做时,我收到以下错误:

TypeError: Property body[0] of BlockStatement expected node to be of a type ["Statement"] but instead got "JSXExpressionContainer"

我该如何解决?

4

2 回答 2

1

这里的文档:

FunctionDeclaration(path) {
  path.insertBefore(t.expressionStatement(t.stringLiteral("Because I'm easy come, easy go.")));
  path.insertAfter(t.expressionStatement(t.stringLiteral("A little high, little low.")));
}

查看您的错误,确保您正确输入了类型。只需在此处查看 babel 类型,看看每种类型需要哪些参数。

于 2019-12-10T20:24:52.350 回答
0

我通过将代码作为纯文本推送找到了一种解决方法。React 似乎工作得很好。

path.node.children.push('<div>Click me</div>')
于 2019-05-11T13:05:03.153 回答