This time I will bring you the abstract use of components in React. What are the precautions for the abstract use of components in React? The following is a practical case, let's take a look.
mixin
The characteristics of mixin are widely found in variousobject-oriented languages. In ruby, the include keyword is mixin, which is to mix one module into another module or class.
Encapsulating mixin methodconst mixin = function(obj, mixins) { const newObj = obj newObj.prototype = Object.create(obj.prototype) for(let props in mixins) { newObj.prototype[props] = mixins[props] } return newObj } const BigMixin = { fly: () => { console.log('i can fly') } } const Big = function() { console.log('new big') } const FlyBig = mixin(Big , BigMixin) const flyBig = new FlyBig() FlyBig.fly() //'i can fly'
Mixins in React
React provides mixin attributes when using createClass to build components, such as the official PureRenderMixin:import React from 'react' import PureRenderMixin from 'react-addons-pure-render-mixin' React.createClass({ mixins: [PureRenderMixin] render() { return <p>foo</foo> } })
lifecycleMethods are differentiated.
Implementing two common methods with the same name in different mixins will not be overwritten in React. An error in ReactClassInterface will be reported in the console, indicating that you tried to define a method multiple times in the component. **Therefore, mixins of Chongming ordinary methods are not allowed in React. If it is a method defined by the React life cycle, the life cycle methods of each module will be superimposed and executed sequentially**. We see that the mixin using createClass does two things for the group price: 1. Tool methods: Some tool methods are shared for components and can be used in each component. 2. Life cycle inheritance: props and state are merged, and mixin can merge life cycle methods. If there are many mixins to define the componentDidMount cycle, Then React will merge them very intelligently and execute them together.ES6 CLASS and decorator
Now we prefer to use the es6 class method to build components, but it does not support mixins. There is no good solution in the official documentation. Decorators are a feature defined in ES 7, similar to annotations in Java. Decorators are methods used at runtime. In redux or other application layer frameworks, decorators are increasingly used to decorate components. The core-decorator library provides developers with some practical decorators, which implement the @mixin we want. It superimposes the methods of each mixin object onto the prototype of the target object to achieve the purpose of mixin.import React, { Component } from 'react' import { mixin } from 'core-decorator' const PuerRender = { setTheme() } const Them = { setTheme() } @mixin(PuerRender, Them) class MyComponent extends Component { render() {...} }
Note: react 0.14 starts stripping mixin
Mixin problem Destroys the encapsulation of the original components The mixin method can mix methods to bring new features to the component, and it will also bring new props and state, which means that there are some invisible states that we need to maintain. Mixins may also have interdependence. In this form, dependency chains will affect each otherI believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the PHP Chinese website! Recommended reading:JS prompt text box email address completion
$.ajax() method how to retrieve the message from the server Get json data
The above is the detailed content of How to use abstract components in React. For more information, please follow other related articles on the PHP Chinese website!