React: Как получить доступ к объекту props вне его класса? - PullRequest
0 голосов
/ 14 февраля 2019

Я не уверен, как получить доступ к объекту props вне контекста принимающего ребенка, есть ли способ?Вот минимальный тестовый файл (Jest и Enzyme), который я настроил для экспериментов.Я получаю синтаксическую ошибку, когда пытаюсь передать this.props.propNumber in: "this is a reserved word"

const React = require("react");
const enzyme = require("enzyme");
const Adapter = require("enzyme-adapter-react-16");

enzyme.configure({ adapter : new Adapter() });

// simple component with an increment method
class Foo extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      testIncrement : 1
    };
  }

  handleIncrement = (incrementSize) => {
    this.setState({
      testIncrement : this.state.testIncrement += incrementSize
    })
  };

  render() {
    return (
      <div>
        Test
      </div>
    );
  }
}


const wrapper = enzyme.shallow(
  <Foo
    propNumber={5}
  />
);


test('prop passage into shallow instance', () => {


wrapper.instance().handleIncrement(this.props.propNumber);

  expect(wrapper.state('testIncrement')).toEqual(6);
});

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

В файле родительского компонента экспортируйте значение, а затем в файле дочернего компонента импортируйте значение

0 голосов
/ 14 февраля 2019

Вы знаете, что такое реквизит, потому что вы передаете его, зачем вам нужен доступ к нему из класса?

const incrementSize = 1;
const propNumber = 5;

const wrapper = enzyme.shallow(
  <Foo
    propNumber={propNumber}
  />
);

test('prop passage into shallow instance', () => {
  wrapper.instance().handleIncrement(incrementSize);
  expect(wrapper.state('testIncrement')).toEqual(propNumber + incrementSize);
});

А ваша handleIncrement функция не принимает массив, поэтомунет причин передавать его один.

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