Консоль.регистрируйте изменения на основе пользовательского ввода после печати

#javascript #reactjs #console.log

Вопрос:

У меня эта сага вызывается при открытии страницы с двумя консолями.войдите в систему для отладки. Это дает мне два журнала, которые должны быть похожи. Значения в данных[0] используются в сводной таблице. В таблице доступны для редактирования два поля, они равны нулю при сетевом вызове. Однако, если я отредактирую поля в браузере, прежде чем развернуть консоль.регистрируйте значение, которое теперь отображается как все, что я ввел в поле. Это произойдет в любом из журналов, поэтому сначала поле может быть записано как нулевое, а затем как значение.

 function* saga({ Id }) {  try {  const response = yield call(get, GET_DATA(Id));  console.log(response.data[0]);  console.log(response.data[0]);  yield put(fetchDataSuccess(response.data));  } catch (error) {  yield put(displayErrorMessage(NOB.ERROR));  } }   

Являются консольными.журнал должен быть в состоянии измениться после печати, если что-то изменится? Это несколько снизило бы эффективность отладки.

Ответ №1:

console.log() эффективно асинхронно, и если значение , которое вы выводите, является объектом, который изменяется вскоре после вашего вызова console.log() , вполне вероятно, что на самом деле выводится обновленная версия.

Итак, короткий ответ на ваш вопрос, да.

Если вам нужно вывести его примерно во время изменения, есть два относительно простых средства, которые вы можете использовать для вывода на этом этапе.

Первым было бы просто вывести клон. Вы можете создать неглубокий клон, подобный этому:

 const objectToOutput; console.log({ ...objectToOutput });  

Если вам нужен глубокий клон, вы можете использовать библиотеку или просто написать свой собственный метод.

Вторым вариантом было бы сначала преобразовать его в JSON. Вы даже можете затем преобразовать этот JSON обратно в объект и вывести его, если хотите. Удобно для сложных объектов, содержащих простые данные (например, вы получите их при вызове API).:

 const objectToOutput; console.log(JSON.stringify(objectToOutput, null, 2)); // or console.log(JSON.parse(JSON.stringify(objectToOutput)));