Tax*_*ool 5 ecmascript-6 reactjs react-jsx es6-modules
我有一个简单的组件,它应该在我的表单组件中呈现不同类型的字段:
import React from "react";
export default class Field extends React.Component {
render() {
switch (this.props.type) {
case 'textarea': {
return (
<div className="col-xs-12">
<textarea
placeholder={this.props.placeholder}
name={this.props.name}
>
</textarea>
</div>
)
}
case 'text': {
return (
<div className="col-md-6 col-lg-4">
<input
type="text"
placeholder={this.props.placeholder}
name={this.props.name}
/>
</div>
)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的表单组件中使用此组件,如下所示:
export default class SubmitForm extends React.Component {
render() {
return (
.
.
.
<Field
type="text"
placeholder="something"
name="something"
/>
<Field
type="textarea"
placeholder="another"
name="othername"
/>
.
.
.
)
}
}
Run Code Online (Sandbox Code Playgroud)
我想到的是以某种方式实现我的字段组件,以便能够使用点表示法,如使用Dot Notation for JSX组件中所解释的那样,我已经看到了许多其他库,我希望能够像这样使用这个组件:
<Field.Text name="sth" placeholder="sth" />
<Field.TextArea name="other" placeholder="other stuff" />
Run Code Online (Sandbox Code Playgroud)
但我不能按照React docs中提到的方式去做.我怎样才能做到这一点?
Li3*_*357 10
只需创建单个组件并将其导出为名称:
//Field.js
class TextArea extends React.Component {
...
}
class Text extends React.Component {
...
}
export { Text, TextArea };
Run Code Online (Sandbox Code Playgroud)
然后从模块导入所有名称:
import * as Field from './path/to/Field.js';
Run Code Online (Sandbox Code Playgroud)
或者,如果您更喜欢导出这样的默认对象(这正是文档中的示例所做的,只是以不同的方式):
export default { Text, TextArea };
Run Code Online (Sandbox Code Playgroud)
其中将使用对象速记属性并导出默认成员 - 对象文字.然后你可以像这样导入它:
import Field from './path/to/Field.js';
Run Code Online (Sandbox Code Playgroud)
最后:
<Field.TextArea ... />
Run Code Online (Sandbox Code Playgroud)
或者,要删除点表示法(您不能使用默认导出选项执行此操作!):
import { Text, TextArea } from './path/to/Field.js';
<Text ... />
<TextArea ... />
Run Code Online (Sandbox Code Playgroud)
当然,完全按照React文档,您可以使用类表达式:
const Field = {
Text: class Text extends React.Component { //you can omit the class name here
//can be stateless functional component if you don't need state
},
TextArea: class TextArea extends React.Component {
}
}
export default Field;
Run Code Online (Sandbox Code Playgroud)
然后导入为默认成员并使用点表示法.
| 归档时间: |
|
| 查看次数: |
5889 次 |
| 最近记录: |