FindDOMNode Flux/ Alt Store

Я пытаюсь получить доступ к dom-узлу из магазина (используя alt), чтобы анимировать с помощью speed.js, но получаю только "не могу прочитать свойство undefined". Можно ли использовать findDOMNode из магазина alt/flux?

import React from 'react'
import alt from '../_alt';
import Actions from '../actions/actions';
import Velocity from 'velocity-animate/velocity';
import Body from '../modules/level_1/body/body1'


class Store {

  constructor(){

    this.bindListeners({
      menuToggle: Actions.MENU_TOGGLE
    });

    this.menuStatus = false

  }

  menuToggle(){
    if (!this.menuStatus){ 
      this.menuStatus = true;
      Velocity(React.findDOMNode(Body.refs.wrap),({ width: '50px' }), 50) 
    } else {
      this.menuStatus = false;
    }
  }

}

export default alt.createStore(Store, 'Store');

Составная часть:

import React from 'react';
import connectToStores from 'alt/utils/connectToStores';
import Store from '../../../stores/store'
import Actions from '../../../actions/actions';
import Styles from './body1.css';


import Hero from '../../objects/hero/full_width' 

let image = ['../../../../assets/full_width1.jpg', 'image']

@connectToStores
export default class Body extends React.Component {

  static getStores(){
    return [Store];
  }

  static getPropsFromStores(){
    return Store.getState();
  }

    render(){
        return (
            <div ref='wrap'>
                <Hero content={image} />
            </div>
        );
    }

}

2 ответа

Кузов - класс реакции, у которого нет ссылок. Что вам нужно, это элемент реагирования (экземпляр класса реагирования), который является "этим" внутри рендера, componentDidMount и т. Д.

Вам нужно будет каким-то образом предоставить элемент реакции хранилищу (возможно, вызвав menuToggle с фактическим элементом реакции).

В качестве альтернативы вы можете использовать componentDidMount, чтобы установить ссылку на класс Body, чтобы toggle мог ее использовать.

Шаблон, который я использовал с некоторым успехом, заключается в создании действия инициализации, которое принимает в качестве одного из аргументов компонент React. Затем в componentDidMount() Вы можете назвать это действие, передавая this в качестве аргумента. Это позволяет вашему магазину иметь дескриптор этого элемента React, а также все связанные с ним свойства, чтобы вы могли делать такие вещи, как React.findDOMNode(component.refs['someref']),

Другие вопросы по тегам