Я пришел к любопытному моменту в приложении, которое писал некоторое время, и хотел бы узнать немного больше. К сожалению, переписывание является большим, и настроить тест, чтобы понять это прямо сейчас, немного сложно, но это будет зависеть от того, как обращаться с конечным продуктом senario. Мой пример не является точным кодом, но должен описывать поток. Я почти уверен, что в результате я получу правильные копии (которые я бы не предпочел) из-за распространения, но мое любопытство заключается в том, что в зависимости от того, что «распространяется» на объект перед его передачей, и глубины ценность идет (функции могут быть переданы) Я, вероятно, узнаю через час или два, каким образом я должен это сделать, но я понял, какого черта, почему бы не бросить ее в стек и посмотреть, что у великих волшебников есть сказать.
Вот случай:
const state = { a: [1], b: [2], c: [3]};
function foo(a){
a.push(Math.floor(Math.random()*1000));
}
function bar(o){
Object.keys(o).forEach(k => {
foo(o[k]);
})
}
while(true){
const o = {...state};
bar(o);
}
Теперь за пределами очевидной бесконечности l oop и тривальной природы примера, которая является основами.
Я полагаю, что на каждой итерации его состояние out будет исходным объектом и потребует, чтобы произведение 'bar' было возвращено назад и было установлено состояние, подобное следующему, чтобы иметь возможность вносить какие-либо изменения в объекты в объекте.
function bar(o){
Object.keys(o).forEach(k => {
foo(o[k]);
})
}
while(true){
const o = {...state};
bar(o);
state = o;
}
||
function bar(o){
Object.keys(o).forEach(k => {
foo(o[k]);
})
reutrn o;
}
while(true){
const o = {...state};
state = bar(o);
}
, хотя я не совсем уверен, что второй будет работать, так как я не выполнял код явно, но это больше начальный случай Ульд никогда не обновляет основное состояние, где делают два других. В этом небольшом примере я понимаю, что он может иметь не совсем смысл, а основываться на условном выборе того, что из объекта использовать. настроить его в отдельном объекте, передав его, выполнив необходимые для него опции, а затем отразить это в первичном объекте. Теперь другое, чем распространение значений, создание объектов без него, которые будут переданы в группу функций, были бы не очень хороши, так как в конечном итоге вам нужно было бы определять все вручную, но при этом вы будете иметь ссылки, противоположные правильные копии, которые затем сплавят первый, который будет работать с этим параметром в первой строке l oop.
const o = {
a: state.a,
b: state.b,
c: state.c,
};
Наконец. Если мои наблюдения верны (если в моих примерах есть какие-то незначительные ошибки кодирования, я извиняюсь за визуальную ссылку на то, о чем я говорю), каковы другие способы, позволяющие объединить данные объекта и сохранить ссылки нетронутыми? Это единственное решение, просто написание функции, которая устанавливает o = {key: state [otherKey]}, чтобы ссылки оставались нетронутыми
. Еще раз прошу прощения, если это не подходящий вопрос для стека. Я размышляю вслух, это заставило меня задуматься, как я уже сказал, я, вероятно, узнаю через несколько часов, но, возможно, у кого-то есть какой-то лучший способ организовать и обработать такие аргументы, пытаясь сохранить эти ссылки в переменных, которые передаются через 4 или 5 вызовов функций, поэтому нет необходимости возвращать данные и устанавливать их явно. Даже если подумать, я полагаю, что это может быть просто практикой программирования в целом, так как найти установщик может быть трудно отладить, и приложение также тогда будет глубоко связано.
РЕДАКТИРОВАТЬ:
while(true){
const {a, b, c} = state;
foo(a);
foo(b);
foo(c);
//would also need to be store back in state after modification if im not mistaken
}