Что такое ' @ ' (символ at)в декораторе Redux @connect?



Я изучаю Redux с React и наткнулся на этот код. Я не уверен, что это возвращение конкретное или нет, но я видел следующий фрагмент кода в одном из примеров.



@connect((state) => {
return {
key: state.a.b
};
})


в то время как функциональность connect довольно просто, но я не понимаю @ до connect. Это даже не оператор JavaScript, если я не ошибаюсь.



может кто-нибудь объяснить, пожалуйста, что это и почему это использовали?



обновление:



Это на самом деле часть react-redux который используется для подключения компонента React к хранилищу Redux.

679   2  

2 ответов:

The @ символ на самом деле является выражением JavaScript в настоящее время предлагается означить декораторы:

декораторы позволяют аннотировать и модифицировать классы и свойства во время разработки.

вот пример настройки Redux без и с декоратором:

без оформителя

import React from 'react';
import * as actionCreators from './actionCreators';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';

function mapStateToProps(state) {
  return { todos: state.todos };
}

function mapDispatchToProps(dispatch) {
  return { actions: bindActionCreators(actionCreators, dispatch) };
}

class MyApp extends React.Component {
  // ...define your main app here
}

export default connect(mapStateToProps, mapDispatchToProps)(MyApp);

С помощью декоратора

import React from 'react';
import * as actionCreators from './actionCreators';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';

function mapStateToProps(state) {
  return { todos: state.todos };
}

function mapDispatchToProps(dispatch) {
  return { actions: bindActionCreators(actionCreators, dispatch) };
}

@connect(mapStateToProps, mapDispatchToProps)
export default class MyApp extends React.Component {
  // ...define your main app here
}

как приведенные выше примеры эквивалентны, это просто вопрос предпочтения. Кроме того, синтаксис декоратора еще не встроен в какие-либо среды выполнения Javascript и все еще является экспериментальным и может быть изменен. Если вы хотите использовать его, он доступен с помощью Бабель.

Очень Важно!

эти реквизиты называются реквизитами состояния, и они отличаются от обычных реквизитов, любое изменение реквизитов состояния компонента снова и снова запускает метод визуализации компонента, даже если вы не используете эти реквизиты для Производительность попробуйте привязать к вашему компоненту только те реквизиты состояния, которые вам нужны внутри вашего компонента, и если вы используете подпорки, только свяжите эти реквизиты.

пример: скажем, внутри вашего компонент вам нужно только два реквизита:

  1. последнее сообщение
  2. имя пользователя

не делай этого

@connect(state => ({ 
   user: state.user,
   messages: state.messages
}))

этого

@connect(state => ({ 
   user_name: state.user.name,
   last_message: state.messages[state.messages.length-1]
}))

Comments

    Ничего не найдено.