Home  >  Article  >  Web Front-end  >  How to use abstract components in React

How to use abstract components in React

php中世界最好的语言
php中世界最好的语言Original
2018-04-13 10:29:201178browse

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 various

object-oriented languages. In ruby, the include keyword is mixin, which is to mix one module into another module or class.

Encapsulating mixin method

const 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'
For the generalized mixin method, all the methods in the mixin object are mounted to the original object through assignment to realize the mixing of the object.

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>
  }
})
Pass in the array mixins in the createClass object parameter, which encapsulates the modules we need. The mixins array can also add multiple mixins. There is overlap between each mixin method. For ordinary methods and

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() {...}
}
As mentioned above, decorator only acts on classes, and also acts on methods. It can control the own attributes of methods.

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 other

I 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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn