2016-09-28 1 views
3

Хорошо, вот рассол, что я нахожусь, один из моих действий в actions/index.js является:Как я перехожу часть Redux магазина в массив

export function requestPeople() { 
    return (dispatch, getState) => { 
    dispatch({ 
     type: REQUEST_PEOPLE, 
    }) 

    const persistedState = loadState() // just loading from localStorage for now 
    console.log(persistedState) 


    //Object.keys(persistedState).forEach(function(i) { 
    //var attribute = i.getAttribute('id') 

     //console.log('test', i,': ', persistedState[i]) 
     //myArr.push(persistedState[i]) 

    //}) 
    //console.log(myArr) 
    //dispatch(receivePeople(persistedState)) // I'm stuck here 
} 
} 

и когда я console.log(persistedState) сверху в консоли Chrome Я получаю состояние people именно так.

Object {people: Object} 

Затем, когда я углубиться в people: Object выше, я их так:

abc123: Object 
abc124: Object 
abc125: Object 

и когда я углубиться в каждую из этих щенков (нажав на маленький треугольник в консоли Chrome) Я получаю каждый так:

abc123: Object 
    firstName: 'Gus' 
    id: 'abc123' 
    lastName: 'McCrae' 

// when I drill down into the second one I get 
abc124: Object 
    firstName: 'Woodrow' 
    id: 'abc124' 
    lastName: 'Call' 

Теперь, вот где я застрял.

В таблице я использую Аллен Клык реагировать-самозагрузку-таблицу, которая принимает только массив, и это получить называеться как это <BootstrapTable data={people} /> так нужно мой выше данные должны быть преобразовано в массив как это:

const people = [{ 
    id: abc123, 
    firstName: 'Gus', 
    lastName: 'McCrae' 
}, { 
    id: abc124, 
    firstName: 'Woodrow', 
    lastName: 'Call' 
}, { 
    ... 
}] 

// and eventually I'll call <BootstrapTable data={people} /> 

Мой вопрос конкретно в том, как мне преобразовать состояние people, указанное выше, в этот необходимый массив? В моем action/index.js файле я пробовал: Object.keys(everything!!!)

И, наконец, когда у меня есть массив, что это лучший способ передать этот массив в <BootstrapTable data={here} /> используя состояние, переменным, переданное действие, что-то я никогда не слышал все же?

Любая помощь будет очень признательна! FYI, это мой первый вопрос в Stack Overflow, чувствующий ностальгию. Я полицейский, работающий полный рабочий день, и пытаюсь научиться кодировать на стороне. Еще раз спасибо!

UPDATE:

Благодаря предложению Петра Berebecki, я связывая это так:

export function requestPeople() { 
    return (dispatch, getState) => { 
    dispatch({ 
     type: REQUEST_PEOPLE, 
    }) 

const persistedState = loadState() 
console.log('persistedState:', persistedState) 

const peopleArr = Object.keys(persistedState.people).map(function(key) { 
    return persistedState[key] 
}) 

console.log(JSON.stringify(peopleArr)) 

//dispatch(receivePeople(persistedState)) 
    } 
} 

и получение [NULL, NULL, NULL]

так:

enter image description here

ответ

2

Добро пожаловать в Stack Overflow :)

Чтобы преобразовать вложенный persistedState.people объект в массив можно сначала создать временный массив ключей, используя Object.keys(persistedState.people), а затем map() по клавишам, чтобы заменить каждый ключ объекта, найденный в оригинальном вложенном объекте - persistedState.people - в этом ключе. Вы можете назначить результирующий массив переменной, которую вы затем можете передать в BootstrapTable. Ознакомьтесь с приведенным ниже кодом и демо: http://codepen.io/PiotrBerebecki/pen/yaXrVJ

const persistedState = { 
    people: { 
    'abc123' : { 
     id:'abc123',firstName: 'Gus', lastName: 'McCrae' 
    }, 
    'abc124' : { 
     id:'abc124',firstName: 'Woodrow', lastName: 'Call' 
    }, 
    'abc125' : { 
     id:'abc125',firstName: 'Jake', lastName: 'Spoon' 
    } 
    } 
} 


const peopleArr = Object.keys(persistedState.people).map(function(key) { 
    return persistedState.people[key]; 
}); 


console.log(JSON.stringify(peopleArr)); 
/* 
Logs the following array: 
[ 
{"id":"abc123","firstName":"Gus","lastName":"McCrae"}, 
{"id":"abc124","firstName":"Woodrow","lastName":"Call"}, 
{"id":"abc125","firstName":"Jake","lastName":"Spoon"} 
] 
*/ 
+1

Спасибо за помощь! Тем не менее, я просто попробовал ваши предложения.Но я думаю, что мой peopleObj настроен немного иначе, я получаю '[{" abc123 ": {" id ":" abc123 "," firstName ":" Gus "," lastName ":" McCrae "}, abc124 ": {" ID ":" abc124" , "Имя": "Вудро", "LastName": "Call"}, "abc125": { "ID": "abc125", "Имя": "Джейк", «lastName»: «Spoon»}}] ' –

+1

Вот код моего редуктора, который использовался для создания моего peopleObj:' const initialValues ​​= { человек: { 'abc123': {id: 'abc123', firstName: 'Gus ', lastName:' McCrae '}, ' abc124 ': {id:' abc124 ', firstName:' Woodrow ', lastName:' Call '}, ' abc125 ': {id:' abc125 ', firstName:' Jake ', lastName:' Spoon '}, }, addedPerson: false, } ' –

+0

Я только что обновил свой код и код. Посмотрите, если он решает ваш вопрос. –