динамическое setState для добавления нового динамического свойства в реаги - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть этот сценарий, где я должен добавить несколько и динамическое свойство в массив объекта.Говорит, что lang = ['en', 'fr', 'more'], как я могу создать такую ​​объектную структуру

Ниже моя неудачная попытка:

<code>class App extends React.Component {
  state = {
    lang: ["en", "fr"],
    items: [
      {
        id: 1,
        value: {
          en: "abc",
          fr: "hello"
        }
      }
    ]
  };
  onChange = (e, i) => {
    this.setState({
      items: this.state.items.map(o => ({
        ...o,
        value: {
          [this.state.lang[i]]: e.target.value //need fix
        }
      }))
    });
  };
  render() {
    return (
      <div className="App">
        {this.state.lang.map((o, index) => (
          <div>
            <input
              onChange={e => this.onChange(e, index)}
              placeholder={o}
              type="text"
            />
            <br />
          </div>
        ))}
        <br />
        <pre>{JSON.stringify(this.state, null, 2)}
);}}

https://codesandbox.io/s/p746jn313q

1 Ответ

0 голосов
/ 25 сентября 2018

Если я понял, что вы пытаетесь сделать правильно, вам просто нужно было разложить объект value внутри вашей карты:

onChange = (e, i) => {
    this.setState({
      items: this.state.items.map(o => ({
        ...o,
        value: {
          ...o.value,  // <- this
          [this.state.lang[i]]: e.target.value
        }
      }))
    });
  };

Я также отредактировал коды и поле: https://codesandbox.io/s/13vo5rrjwj

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