Security News
Node.js EOL Versions CVE Dubbed the "Worst CVE of the Year" by Security Experts
Critics call the Node.js EOL CVE a misuse of the system, sparking debate over CVE standards and the growing noise in vulnerability databases.
react-component-extension
Advanced tools
Since mixins are dead, higher order components are the way to go.
But when you use multiple higher order component for a Component it can be confusing, you have to think about where the behavior comes from.
An Extension is namespaced and also explicit about what are the methods/variables that are be provided to the Component.
Here we are defining a UserConnection
extension, it allows to get the user information it allows you to call in your component, this.props['UserConnection'].variables.firstName
and this.props['UserConnection'].variables.lastName
.
If you want to refresh the user simply call this.props['UserConnection'].refresh()
.
You can pass accountUrl
and updateAccountUrl
as params of the Extension.
import * as Extension from 'react-component-extension';
const UserConnection = {
// This is the public name of the Extension
extensionName: 'UserConnection',
exports: {
// Variables accessibles from the Extension
variables: ['firstName', 'lastName'],
// Methods callable on the Extension
methods: ['refresh'],
},
// Required params to use the extension
// should be an object key: 'description'
requiredParams: {
accountUrl: 'url to fetch the user',
},
optionalParams: {
updateAccountUrl: 'url to update the user',
},
}
export default Extension.create(UserConnection);
class Account extends React.Component {
render() {
<div>
hello {this.props['UserConnection'].variables.firstName}
click <button onClick={this.props['UserConnection'].refresh}>here</button> to refresh
</div>
}
}
export default UserConnection(AccountPage, {
accountUrl: 'api/account'
});
const AddSpinningLoader = {
extensionName: 'AddSpinningLoader',
exports: {
methods: ['start', 'stop']
},
getInitialState() {
return {
loading: false,
}
},
start() {
this.setState({loading: true})
},
stop() {
this.setState({loading: false})
},
renderExtension() {
let spinningLoader = this.state.loading ? <SpinningLoader/> : null;
return (
<div>
{spinningLoarder}
{this.renderComponent()}
</div>
)
}
};
export default Extension.create(AddSpinningLoader);
@AddSpinningLoader
class Form extends React.Component {
constructor(props) {
super(props);
this.onSubmitButton = this.onSubmitButton.bind(this);
this.state = {
firstName: ''
};
}
onSubmitButton() {
this.props['ValidationErrorBar'].validateOrShowBar().then(
this.doAccountUpdate
);
}
doAccountUpdate() {
this.props['AddSpinningLoader'].start();
$.post('api/account_update', {
firstName: this.state.firstName
}).then(
this.props['AddSpinningLoader'].stop
);
}
render() {
<div>
<input type="text" value={this.state.firstName} onChange={(firstName) => this.setState({firstName})} />;
<button onClick={this.onSubmitButton} />
</div>
}
}
Form = ValidationErrorBar(Form, {
isValid: function () {
return this.firstName !== '';
},
});
export default Form;
npm install --save react-component-extension
It is pretty straightforward to make a React Mixin an Extension, for example here is react-timer-mixin as an Extension
FAQs
Easy use of Higher Order Component
The npm package react-component-extension receives a total of 6 weekly downloads. As such, react-component-extension popularity was classified as not popular.
We found that react-component-extension demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Critics call the Node.js EOL CVE a misuse of the system, sparking debate over CVE standards and the growing noise in vulnerability databases.
Security News
cURL and Go security teams are publicly rejecting CVSS as flawed for assessing vulnerabilities and are calling for more accurate, context-aware approaches.
Security News
Bun 1.2 enhances its JavaScript runtime with 90% Node.js compatibility, built-in S3 and Postgres support, HTML Imports, and faster, cloud-first performance.