Есть ли способ обновить только некоторые значения в коллекции объектов в хранилище ReactJS? У меня есть вызов, который дает мне весь список клиентов с некоторым анонимным значением. Мне нужно обновить хранилище после получения этого ответа, но затем снова сделать другой вызов службы с этими анонимизированными данными, чтобы получить реальные значения. Мне нужны данные из первого вызова, а также для получения всей информации для моей сетки данных. Итак, как мне обновить свой магазин только с некоторой парой значений ключа, а не с целым набором данных в приложении react-redux?обновить тот же магазин с некоторыми значениями react-redux
ответ
Вы не указали какой-либо код, но ... вы сделали бы это в своем редукторе.
Допустим, у вас был редуктор с именем clientReducer, вы могли бы сделать что-то вроде этого, если это только один объект, как вы сказали выше.
function clientReducer(state, action) {
return Object.assign({}, state, {
[action.payload.key] : action.payload.value
}
}
Ваше действие будет выглядеть примерно так:
function changeClientValue(key, value) {
return {
type: 'CHANGE_CLIENT_VALUE',
payload: {
key: key,
value: value
}
}
}
Для массива объектов, я считаю, что это должно работать без использования каких-либо дополнительных библиотек, как неизменные JS. Хотя я его не тестировал!
const initialState = [
{
id: 1,
clientFirstName: 'Paul',
...otherFields
},
{
id: 2,
clientFirstName: 'Adam',
...otherFields
}
];
// Reducers
function clientSubReducer(state = initialState, action) {
switch(action.type) {
case 'MODIFY_CLIENT':
return {
...state[action.payload.index],
...action.payload.fields
}
}
}
export function clientReducer(state, action) {
switch(action.type) {
case 'MODIFY_CLIENT':
return [
...state.slice(0, action.payload.index),
clientSubReducer(state, action),
...state.slice(action.payload.index + 1)
]
}
}
//Action
function modifyClient(client) {
return (dispatch, getStore) => {
const store = getStore();
let storeIndex = -1;
for (let i = 0; i < store.clients.length; i++) {
const storeClient = clients[i];
if (client.id === storeClient.id) {
storeIndex = i;
}
}
// Our store contains the client object
if (storeIndex > -1) {
dispatch({
action: 'MODIFY_CLIENT',
payload: {
index: storeIndex,
fields: client // You could diff the client and store client and pass only the ones you want to modify back
}
})
}
//Our Store does not contain the client object
else {
dispatch({
action: 'ADD_CLIENT',
payload: {
client: client
}
})
}
}
}
Спасибо. Но данные, которые я получаю, составляют около 1000. Таким образом, будет по меньшей мере 1000 закодированных значений. Я забираю их и делаю еще один вызов службы, когда я заполняю страницу закодированным значением. После ответа от второго вызова мне нужно сопоставить идентификаторы обоих вызовов и изменять соответствующие атрибуты в хранилище, а не все атрибуты. В принципе, накладывается то, что уже присутствует в магазине с декодированным ответом. –
К сожалению, вы получаете * массив * * объектов *? Это верно? – Mirrorcell
Да. Что-то вроде этого. '{" deAnonymizedList ": [{" key ":" @ # $ # @ $ @ 26071 "," value ":" ActualValue26071 "}, {" key ":" @ # $ # @ $ * 51523 "," value ":" ActualValue51523 "}, {" key ":" @ # $ # @ $ @ 38514 "," value ":" ActualValue38514 "}] }' –
- 1. Обновить тот же столбец в нескольких строках с разными значениями
- 2. ajax тот же идентификатор с несколькими значениями
- 3. Enum с некоторыми повторяющимися значениями?
- 4. UISlider с некоторыми возможными значениями
- 5. как обновить тот же файл
- 6. магазин и тот же объект ссылка с различными значениями в карте
- 7. Обновить тот же контроллер с новыми данными?
- 8. Заменить аналогичные столбцы с некоторыми числовыми значениями
- 9. Условный случай WHERE с некоторыми значениями NULL
- 10. Как обновить один и тот же идентификатор с разными значениями в одной таблице?
- 11. reactRedux не определен
- 12. Почему ReactRedux не определен?
- 13. Связывание источника данных с некоторыми значениями Enum
- 14. Yii HAS_MANY с некоторыми фиксированными значениями
- 15. заменить NA матрицы с некоторыми значениями
- 16. Проблема pChart с некоторыми значениями данных
- 17. Инициализировать PriorityBlockingQueue с некоторыми предопределенными значениями
- 18. Неожиданное поведение в массиве с некоторыми значениями
- 19. Использование SortInPlace с некоторыми дополнительными значениями (ноль)
- 20. Инициализация ArrayList с некоторыми предопределенными значениями
- 21. Python csv.DictWriter с dict, отсутствующим некоторыми значениями
- 22. MySQL - обновить тот же столбец дважды
- 23. PHP SQL, выбрав тот же столбец с двумя разными значениями
- 24. PHP Session Array - хранить тот же элемент с разными значениями
- 25. Один и тот же элемент с разными значениями - XML / XSLT
- 26. Как добавить Blob AND Table в тот же магазин Azure
- 27. Весенняя интеграция idempotent metadatastore сообщение, идущее в тот же магазин
- 28. ExtJS: сетки Master Detail, используя тот же магазин
- 29. Erroron reactredux маршрутизатор
- 30. ExtJS4 магазин, фильтр 1 поле несколькими значениями
Не могли бы вы дать нам более подробную информацию о текущем неизменяемом объекте, который у вас есть в магазине? ImmutableJS имеет множество методов для этой цели в зависимости от типа данных: List, Map, ... – Ryan27
Данные выглядят примерно так: '{" pid ":" 132430-26071-1102-10064340-42193 "," clientSalutation «:« Mr. »,« clientFirstName »:« @ # $ # @ $ * 26071 »,« clientLastName »:« @ # $ # @ $ @ 51523 »,« contractTypeDescription »:« APS 04 »,« currency »: "EUR", "QualityScore": 0, "qualityVal": 32, "portfolioTotalAssets": 1.316970318E7, "ClientId": 132430, "portfolioKey": "1102-10064340.11", "стратегия": "Умеренный", "isNew" : правда, "outcomeScorePct": 0.0, "lastActivityDate": "2016-09-03T00: 00: 00", "Наивысший": 11,253554999999999, "outcomeScore": 0, "qualityScoreCalculated": 0, "ytdAvailable": правда,» ytdString ":" 11.253554999999999 "," qualityLabel ":" Poor "}' –
Мои данные - это в основном коллекция этих объектов, где после второго вызова я получаю значения для «clientFirstN ame», и мне просто нужно обновить эти значения и позволить другие данные будут такими, какие есть. –