Массив проходов как опоры в реакциях

Я новичок в реакции.

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

случай-1:

var c = ['program'];
var Navigation = React.createClass({
    getInitialState: function () {
        return {
            openDropdown: -1
        };
    },
    getDefaultProps: function () {
        return {
            config: ['everyone']
        };
    },
    render: function () {
        return (
            <div className="navigation">
                helloworld {this.props.config[0]};
            </div>
            );
    }
});

React.render(<Navigation config={c}/>, document.body);

Это рендеринг программы helloworld. который ожидается.

Позже я пробовал.

случай-2:

var c = ['program'];
var Navigation = React.createClass({
    getInitialState: function () {
        return {
            openDropdown: -1
        };
    },
    getDefaultProps: function () {
        return {
            config: ['everyone']
        };
    },
    render: function () {
        return (
            <div className="navigation">
              {this.props.config} helloworld ;
            </div>
            );
    }
});

React.render(<Navigation config="React"/>, document.body);

Это рендеринг Reall helloworld. который ожидается, поскольку нет определенного propType.

Далее я пробовал.

case-3:

var c = ['program'];
var Navigation = React.createClass({
    getInitialState: function () {
        return {
            openDropdown: -1
        };
    },
    getDefaultProps: function () {
        return {
            config: ['everyone']
        };
    },
    render: function () {
        return (
            <div className="navigation">
                helloworld {this.props.config[0]};
            </div>
            );
    }
});

React.render(<Navigation config=['!!!'] />, document.body);

Что не делает ничего.

Позже, когда я изменил React.render(<Navigation config=['!!!'] />, document.body); на React.render(<Navigation config={['!!!']} />, document.body);

он отобрал helloworld!!!

В каком-то учебнике я прочитал, что фигурные скобки используются для передачи переменных, чтобы JSX знал, что они являются внешней переменной.

Но почему case-3 не работает с явными фигурными фигурными фигурными скобками, хотя массив сделан во время вызова и почему он работает для case-2, где строка сделана встроенной.

Когда точно используются фигурные скобки?

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

Ответы

Ответ 1

Внутри элементов JSX необходимо использовать фигурные скобки только. Вот так:

<MyComponent somProp={['something']} />

В вышеприведенном случае {} - это способ сказать: "Оцените выражение, которое я прошел внутри, и передайте его как опору". В пределах {} вы можете передать любой действительный объект или выражение JavaScript. Обратите внимание, что если вы передаете строку и, в частности, для строк, вам не нужны фигурные скобки... например <MyComponent somProp="something" />.

Приведенный выше код эквивалентен этому:

var myArray = ['something'];
<MyComponent somProp={myArray} />

Ответ 2

Вам вообще не нужно указывать PropTypes для использования реквизитов. Это просто хороший способ документировать и проверять типы поддержки во время разработки.

Вы правильно используете {}. {} вернет значение выражения внутри.

Однако {['everyone']} не имеет большого смысла. Здесь вы запрашиваете, чтобы React возвращал значение самого массива, а не один из элементов/значений в массиве.

Чтобы получить первое значение из вашего массива, вы должны делать: {this.props.config[0]}, так как значение "каждый" находится в индексе 0 массива.

Если ваш массив имел несколько значений, вы делали бы что-то в строках:

render: function() {
  var values = this.props.config.map(function(value, i){
    return (
      <p>value</p>
    );
  });

  return (
    <div className="navigation">
      helloworld {values};
    </div>
  );
}

Если вы действительно хотите распечатать сам массив, а не конкретное значение внутри него, у вас есть два хороших варианта:

render: function() {
  return (
    <div className="navigation">
      helloworld {this.props.config.toString()};
    </div>
  );
}

или

render: function() {
  return (
    <div className="navigation">
      helloworld {JSON.stringify(this.props.config)};
    </div>
  );
}

Ответ 3

render: function() {
  return (
    <ChildComponent childprop={{Array.of(arrayitem)}} className="navigation">

  );
}