Вызов метода в хранилище из класса машинописи - PullRequest
0 голосов
/ 29 января 2019

Я использую TypeScript, React и Mobx State Tree.

Это мой магазин (index.ts):

import { types as t } from 'mobx-state-tree'
import { Data } from './Data'
export const State = t
  .model('State', {
    data: t.optional(Data, {}),
  })
  .views(self => ({}))
  .actions(self => ({}))
export type StateType = typeof State.Type
export interface Stateable {
  state?: StateType
}

Data.ts:

import { types as t } from 'mobx-state-tree'

export const Data = t
  .model('Data', {})
  .views(self => ({
    get data() {
      return []
    },
  }))
  .actions(self => ({}))

Это компонент React (MyComponent.tsx):

import * as React from 'react'
// @ts-ignore
import { withParentSize } from '@vx/responsive'
import { inject, observer } from 'mobx-react'
import { Calculus } from '../lib/Calculus'
import { Stateable } from '../state'

interface Props extends Stateable {
  parentWidth?: number
  parentHeight?: number
}
// @ts-ignore
@withParentSize
@inject('state')
export class MyComponent extends React.Component<Props> {
  calculus = new Calculus()
  clickHandler = () => {
    this.calculus.start()
  }
  render() {
    const { parentWidth, parentHeight } = this.props
    return (
        <div onClick={this.clickHandler}>
          Click me!
        </div>
    )
  }
}

А это мой Calculus.ts класс:

import { Stateable, StateType } from '../state'
import { inject } from 'mobx-react'
// @inject('state')
export class Calculus {
  start() {
    console.log('start!')
    // HERE I WANT TO CALL data()
  }
  // something ...
}

Я хочу иметь возможность вызватьdata() метод с точки кода, где я размещаю комментарий.Как я могу сделать?Я пытаюсь с инструментами и расширениями, но это не работает ..

Я не могу изменить структуру кода.Как я могу это сделать?

1 Ответ

0 голосов
/ 30 января 2019

Прежде всего.Вы не создали магазин.

Во-вторых.Когда вы пишете метод представления с помощью get , вы не можете вызывать его в скобках.Это будет выглядеть так: state.data.data, где first data - это поле, а second data - ваш метод.И не называйте их так.Выглядит ужасно)

Вот образец

...