I have a simple component which is supposed to render different kind of fields into my form component:
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>
)
}
}
}
}
And I'm using this component in my form component like this:
export default class SubmitForm extends React.Component {
render() {
return (
.
.
.
<Field
type="text"
placeholder="something"
name="something"
/>
<Field
type="textarea"
placeholder="another"
name="othername"
/>
.
.
.
)
}
}
What I have in mind is to somehow implement my field component to be able to use dot notation as explained in Using Dot Notation for JSX components which I have seen many other libraries and I want to be able to use this component like this:
<Field.Text name="sth" placeholder="sth" />
<Field.TextArea name="other" placeholder="other stuff" />
But I can't do it the way mentioned in React docs. How can I do this?
Simply following the docs.
Then when your dot usage
chnage this as following way
Same way they have mentioned in the facebook react docs. Instead of component you can return object which contain your functions.
Just create individual components and export them under names:
Then import all the names from the module:
Or if you prefer exporting a default object like so (which is exactly what the example from the documentation is doing, just in a different way):
Which will use object shorthand properties and export a default member -- an object literal. Then you can import it like so:
And finally:
Or, to get rid of dot notation (you can't do this with the default export option!):
Of course, going exactly by the React documentation, you could do, with class expressions:
Then importing as a default member and using dot notation.