簡體   English   中英

在Paypal Downshift周圍創建Kotlin React Wrapper

[英]Creating a Kotlin React Wrapper around Paypal Downshift

我一直在努力創建一個圍繞PayPal Downshift庫的Kotlin JS包裝器。 我可以讓Downshift在Kotlin生態系統之外正常工作,但在嘗試將它集成到Kotlin JS應用程序中時沒有運氣。

我已將所有屬性剝離到以下內容: -

@file:JsModule("downshift")

package components.downshift

import react.Component
import react.RProps
import react.RState
import react.ReactElement

@JsName("Downshift")
external class DownshiftComponent : Component<RProps, RState> {
    override fun render(): ReactElement?
}

然后在我的React應用程序的渲染方法中添加以下內容: -

child<RProps, DownshiftComponent> {  }

JSX中的等價物在自定義組件內部工作(雖然沒有渲染!)

render() {
    return (
        <Downshift/>
    )
}

我最終得到的錯誤如下: -

TypeError:無法讀取undefined的屬性'$ metadata $'

getOrCreateKClass
node_modules/kotlin/kotlin.js:27368
  27365 | if (jClass === String) {
  27366 |   return PrimitiveClasses_getInstance().stringClass;
  27367 | }
> 27368 | var metadata = jClass.$metadata$;
        | ^  27369 | if (metadata != null) {
  27370 |   if (metadata.$kClass$ == null) {
  27371 |     var kClass = new SimpleKClassImpl(jClass);

對我來說,這表明無法找到“降檔”包中的類(因此未定義)。 如果是這種情況,導入Downshift的正確方法是什么,以便Kotlin可以使用它?

我使用npm安裝了降檔模塊

npm install downsift --save

它顯示在我的package.json文件中: -

{
  "name": "pop-up-shop-ui",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@material-ui/core": "^3.8.2",
    "@material-ui/icons": "^3.0.2",
    "@material-ui/lab": "^3.0.0-alpha.28",
    "d3-shape": "^1.2.2",
    "downshift": "^3.2.0",
    "prop-types": "latest",
    "react": "^16.7.0",
    "react-autosuggest": "^9.4.3",
    "react-currency-format": "^1.0.0",
    "react-dom": "^16.7.0",
    "react-google-charts": "^3.0.10",
    "react-router": "^4.3.1",
    "react-router-dom": "^4.3.1",
    "react-scripts": "2.1.3"
  },
  "devDependencies": {
    "react-scripts-kotlin": "3.0.3"
  },
  "scripts": {
    "start": "react-scripts-kotlin start",
    "build": "react-scripts-kotlin build",
    "eject": "react-scripts-kotlin eject",
    "gen-idea-libs": "react-scripts-kotlin gen-idea-libs",
    "get-types": "react-scripts-kotlin get-types --dest=src/types",
    "postinstall": "npm run gen-idea-libs"
  }
}

以下是使用react / jsx組件時的標准導入

import Downshift from "downshift";

它匹配@file:JsModule("downshift")@JsName("Downshift")注釋。

任何幫助這項工作將不勝感激

我前幾天遇到過這個問題。 錯誤非常令人困惑,但經過一些挖掘后我發現問題源於未定義的類型(在你的情況下為Downshift )。 在初始化反應之前,您可以通過編寫類似prinltn(DownshiftComponent::class)輕松捕獲它。

問題可能在於構建。 不要忘記在其中添加npm依賴項。 有時也會增加構建故障,你需要做一個干凈的構建來查看更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM