我正在开发的网站使用Microdata(使用schema.org).当我们将开发转移到使用React来渲染我们的视图时,我遇到了一个阻止程序,其中React只会在HTML规范中呈现属性,但Microdata指定了自定义属性,例如itemscope.
由于我是比较新的反应,还没有机会充分了解的核心,只是还没有,我的问题是什么将是扩展react.js的功能,允许自定义特性,例如,微观数据的最佳方式?
有没有一种扩展属性/道具解析器的方法,或者它是一个mixin的工作,它检查所有传递的道具并直接修改DOM元素?
(希望我们能够为每个人提供一个扩展,以便在解决方案明确时为此提供支持.)
任何人都知道如何正确添加/扩展自定义的HTML元素属性?
使用TypeScript文档来合并接口,我想我可以这样做:
interface HTMLElement {
block?: BEM.Block;
element?: BEM.Element;
modifiers?: BEM.Modifiers;
}
<div block="foo" />; // error
Run Code Online (Sandbox Code Playgroud)
但我在vscode 1.6.1(最新)中收到以下Intellisense错误:
[ts]'HTMLProps'类型中不存在属性'block'.
在HTMLProps它们指是React.HTMLProps<T>与div元素被声明为使用它像这样:
namespace JSX {
interface IntrinsicElements {
div: React.HTMLProps<HTMLDivElement>
}
}
Run Code Online (Sandbox Code Playgroud)
我试图重新宣布div,但无济于事.
相关:https://github.com/Microsoft/TypeScript/issues/11684
编辑:以下是最终为我工作的内容:
declare module 'react' {
interface HTMLAttributes<T> extends DOMAttributes<T> {
block?: string
element?: string
modifiers?: Modifiers // <-- custom interface
}
}
Run Code Online (Sandbox Code Playgroud) 打字稿似乎在这里对我不利。这是我想要嵌入的内容:
<iframe
width="560"
height="315"
src="https://www.youtube.com/embed/BLAH?showinfo=0"
frameBorder="0"
allow="autoplay; encrypted-media"
allowFullScreen></iframe>
Run Code Online (Sandbox Code Playgroud)
问题是allow属性:
TS2339: Property 'allow' does not exist on type 'DetailedHTMLProps<IframeHTMLAttributes<HTMLIFrameElement>, HTMLIFrameElement>'.
Run Code Online (Sandbox Code Playgroud)
...这是真的,它不在 index.d.ts 中。如何强制添加此属性,或以某种方式强制转换iframe为任何类型等?
我想id为网站中的几乎每个元素生成 ,以便更轻松地处理 Selenium 测试的元素。这是一个好方法吗?我的应用程序发生了很大变化。
我似乎无法将idHTML 属性添加到 React 组件,因为 React 将其解释为 props,例如
<NewEl id='test'/>
Run Code Online (Sandbox Code Playgroud)
...并NewEl获取id道具而不是属性。有时我无法访问React组件,因为我使用了第三方组件。
我应该如何更改该id属性?我的方法是一个好的解决方案吗?
如何将data-reactid属性更改为我的自定义属性,如data-hello="world"在react中?
<a data-reactid="......" ></a>
Run Code Online (Sandbox Code Playgroud) reactjs ×4
javascript ×3
typescript ×2
jsx ×1
microdata ×1
react-jsx ×1
react-redux ×1
selenium ×1
youtube ×1