Таинственный синтаксис onClick = {:: this.submit}

В этот уик-энд я размахивал некоторыми недавними реакционными репозиториями, и я наткнулся на пример, используя синтаксис класса ES6 для компоновки компонентов, который немного изменился.

    class MyThing extends Component {
      constructor(props) {
        super(props)
        this.state = {something: 'the thing'}
      }

      submit() {
        // do stuff
      }

      render() {
        <div>
          <button onClick={::this.submit}>Fire Submit</button>
        </div>
      }
    }

обратите внимание на ::this.submit вместо this.submit.bind(this)

он работает, и я не могу найти документацию в любом месте этой функции, я чувствую себя сумасшедшим человеком, что называется этим синтаксисом onClick={::this.doSomethingInsideRenderWithoutDotBind} и где я могу узнать больше об этом?

Ответ 1

Двойной двоеточие подробно описано здесь и в настоящее время является предложением ES7, поэтому оно еще не установлено в камне, и есть еще много обсуждать его. Он также не позволяет передавать параметры. поэтому он имеет ограниченное использование, если у вас есть эта необходимость.

Существует также функция функции "жирная стрелка" (используется для фактической функции, а не для ее вызова), которая лексически связывается с этим...

// Basic syntax:
(param1, param2, paramN) => { statements }
(param1, param2, paramN) => expression
   // equivalent to:  => { return expression; }

// Parentheses are optional when there only one argument:
(singleParam) => { statements }
singleParam => { statements }

// A function with no arguments requires parentheses:
() => { statements }

// Advanced:
// Parenthesize the body to return an object literal expression:
params => ({foo: bar})

// Rest parameters are supported
(param1, param2, ...rest) => { statements }