как установитьState весь элемент списка состояний - PullRequest
0 голосов
/ 05 марта 2019

У меня есть массив имен строк, и я хочу сделать ниже

  let accountcode:{a:1,b:2};
    let array=["first","second",third];
    this.setState({[array[0]:accountCode,array[1]:accountCode,array[3]:accountCode]})

, но массив - это динамический список, и я должен отобразить в массиве и setState каждый его элемент в одном setState, я пытаюсь

 object.setState(
        {...stateName:accountCodes}
      )

но не работает, и я также попробую ниже и не выкидывать синтаксическую ошибку:

 object.setState(
        stateName.map(s=>{[s]=accountCodes})
      )

что мне делать?

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Вы можете использовать функцию уменьшение для достижения этой цели.Каждая итерация в вашем массиве будет добавлять элемент к вашему объекту с вычисляемым свойством:

const accountcode = { a: 1, b: 2 };
const array = ["first","second","third"];
this.setState(array.reduce((acc, val) => ({[val]: accountcode, ...acc}), {}));

Рабочий пример:

class App extends React.Component {
    componentDidMount(){
        const accountcode = { a: 1, b: 2 };
        const array = ["first", "second", "third"];
        this.setState(array.reduce((acc, val) => ({ [val]: accountcode, ...acc }), {}));
    }

    render(){
        console.log(this.state)
        return <div></div>
    }
}

ReactDOM.render(<App/>, document.getElementById('root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.5.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.5.1/umd/react-dom.production.min.js"></script>
<div id='root'>
0 голосов
/ 05 марта 2019

Вы можете просто написать что-то вроде этого:

let accountCode = {a:1, b:2};
let array = ["first", "second", "third"];

/* Function in which you will call setState */
let newState = {};
array.forEach(el => {
  newState[el] = accountCode;
});

Хотя я предлагаю вам не просто писать newState[el] = accountCode;, иначе вы используете один и тот же объект для каждого свойства newState.Вы можете написать newState[el] = JSON.parse(JSON.stringify(accountCode));, чтобы предотвратить это!

0 голосов
/ 05 марта 2019

Вы смотрите на создание объекта из массива.Вопрос только в перефразировке создания объекта из массива .

В вашем случае решение может быть следующим:

let accountCode = {a: 1, b: 2};
let array = [1, 2, 3, 4];

let output = {};
for (let key of array) {
    output[key] = accountCode;
}

// Almost forgot this
this.setState(output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...