我想使用一个引导卡组件在一个反应网站创建的kotlin。该应用程序使用kotlin-react包装器和react引导库。
put引导文档说使用来放置内容。
<Card>
<Card.Body>This is some text within a card body.</Card.Body>
</Card>到目前为止,我成功地将Card JavaScript模块导入到kotlin-js中。
@file:JsModule("react-bootstrap/Card")
import react.RClass
import react.RProps
@JsName("default")
external val Card: RClass<RProps>有了这个,我可以使用RComponent中的卡。
class Content : RComponent<RProps, RState>() {
override fun RBuilder.render() {
Card {
+"Hello World"
}
}
}呈现给:
<div class="card">
Hello World
</div>另外,我还需要CardBody组件。
就像这样:
class Content : RComponent<RProps, RState>() {
override fun RBuilder.render() {
Card {
CardBody {
+ "Hello World"
}
}
}
},但是CardBody不是一个单独的react引导组件,它可以像Card组件一样导入。它是Card组件中的一个值。
类型记录定义文件Card.d.ts如下所示:
import CardImg from './CardImg';
import { BsPrefixPropsWithChildren, BsPrefixRefForwardingComponent } from './helpers';
import { Color, Variant } from './types';
declare const CardBody: BsPrefixRefForwardingComponent<any, {}>;
declare const CardTitle: BsPrefixRefForwardingComponent<any, {}>;
declare const CardSubtitle: BsPrefixRefForwardingComponent<any, {}>;
declare const CardLink: BsPrefixRefForwardingComponent<any, {}>;
declare const CardText: BsPrefixRefForwardingComponent<any, {}>;
declare const CardHeader: BsPrefixRefForwardingComponent<any, {}>;
declare const CardFooter: BsPrefixRefForwardingComponent<any, {}>;
declare const CardImgOverlay: BsPrefixRefForwardingComponent<any, {}>;
export interface CardProps extends BsPrefixPropsWithChildren {
bg?: Variant;
text?: Color;
border?: Variant;
body?: boolean;
}
declare type Card = BsPrefixRefForwardingComponent<'div', CardProps> & {
Img: typeof CardImg;
Title: typeof CardTitle;
Subtitle: typeof CardSubtitle;
Body: typeof CardBody;
Link: typeof CardLink;
Text: typeof CardText;
Header: typeof CardHeader;
Footer: typeof CardFooter;
ImgOverlay: typeof CardImgOverlay;
};
declare const Card: Card;
export default Card;如果我使用dukat将TypeScript定义文件转换为Kotlin声明。它输出一个Card.Module_react bootstrap.kt文件。
@file:JsModule("react-bootstrap")
@file:JsNonModule
@file:Suppress("INTERFACE_WITH_SUPERCLASS", "OVERRIDING_FINAL_MEMBER", "RETURN_TYPE_MISMATCH_ON_OVERRIDE", "CONFLICTING_OVERLOADS")
import kotlin.js.*
import kotlin.js.Json
import org.khronos.webgl.*
import org.w3c.dom.*
import org.w3c.dom.events.*
import org.w3c.dom.parsing.*
import org.w3c.dom.svg.*
import org.w3c.dom.url.*
import org.w3c.fetch.*
import org.w3c.files.*
import org.w3c.notifications.*
import org.w3c.performance.*
import org.w3c.workers.*
import org.w3c.xhr.*
external var CardBody: BsPrefixRefForwardingComponent<Any, Any>
external var CardTitle: BsPrefixRefForwardingComponent<Any, Any>
external var CardSubtitle: BsPrefixRefForwardingComponent<Any, Any>
external var CardLink: BsPrefixRefForwardingComponent<Any, Any>
external var CardText: BsPrefixRefForwardingComponent<Any, Any>
external var CardHeader: BsPrefixRefForwardingComponent<Any, Any>
external var CardFooter: BsPrefixRefForwardingComponent<Any, Any>
external var CardImgOverlay: BsPrefixRefForwardingComponent<Any, Any>
external interface CardProps : BsPrefixPropsWithChildren {
var bg: dynamic /* String | String | String | String | String | String | String | String | String? */
get() = definedExternally
set(value) = definedExternally
var text: String? /* 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | 'white' | 'muted' */
get() = definedExternally
set(value) = definedExternally
var border: dynamic /* String | String | String | String | String | String | String | String | String? */
get() = definedExternally
set(value) = definedExternally
var body: Boolean?
get() = definedExternally
set(value) = definedExternally
}
external interface `T$0` {
var Img: Any
var Title: Any
var Subtitle: Any
var Body: Any
var Link: Any
var Text: Any
var Header: Any
var Footer: Any
var ImgOverlay: Any
}
@JsName("default")
external var Card: BsPrefixRefForwardingComponent<String /* 'div' */, CardProps> /* BsPrefixRefForwardingComponent<String /* 'div' */, CardProps> & `T$0` */但这不能编译。
发布于 2020-08-03 05:06:14
似乎是看了打字稿的解密
文件: Card.kt
@file:JsModule("react-bootstrap/Card")
package bootstrap
import react.RClass
import react.RProps
@JsName("default")
external val Card: RClass<RProps>文件: Card.ktx.kt (因为在JsModule中不能有非外部声明)
package bootstrap
import react.RClass
import react.RProps
val CardBody : RClass<RProps> = Card.asDynamic().Body
val CardLink : RClass<RProps> = Card.asDynamic().Link用法
fun RBuilder.MyComp(){
Card {
CardBody {+"Card body goes here" }
}
}应该行得通。
发布于 2021-05-26 05:54:24
如果您想对外部元素使用css,您可以这样做,
首先,您需要让元素支持来实现WithClassName接口:
@file:JsModule("react-bootstrap")
@file:JsNonModule
import react.RProps
import react.RClass
import react.dom.WithClassName
@JsName("Card")
external val bsCard : RClass<bsCardProps>
external interface bsCardProps: WithClassName然后在另一个.kt文件中使用样式函数,如下所示:
import styled.styled
val styledBsCard = styled(bsCard)现在,像样式元素一样使用styledBsCard:
override fun RBuilder.render() {
styledBsCard {
css {
width = 200.px
backgroundColor = Color.blue
marginLeft = 100.px
}
//something other elements
}
}https://stackoverflow.com/questions/62920114
复制相似问题