Неперехваченная (в обещании) Ошибка типа: преобразование циклической структуры в JSON

#json #reactjs #post #react-hooks

#json #reactjs #Публикация #реагирующие крючки

Вопрос:

Здесь я получаю следующую ошибку

   body: JSON.stringify({
  name,
  expiresAfterSeconds
})
  

Ошибка типа: преобразование циклической структуры в JSON
—> запуск объекта с конструктором ‘FiberNode’

Проблема, по-видимому, в том, что циклические структуры не могут быть преобразованы с помощью JSON stringify . Однако, похоже, я не могу найти место, где я использую круговые структуры. Я что-то здесь упускаю?

Пример циклической структуры: var a = {}; a.b = a;

Элементы выборки

 async function fetchItems(name, expiresAfterSeconds) {
  const newItemData = {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      name,
      expiresAfterSeconds
    })
  };
  const response = await fetch('/api/add-item', newItemData)
    .then(response => response.json())
    .then(data => console.log(data));
}
  

newItemForm()

 const NewItemForm = () => {
  const [itemData, setItemData] = React.useState({
    name: '',
    expiresAfterSeconds: ''
  });
  const handleSubmit = (e) => {
    e.preventDefault();
    fetchItems(itemData.name, itemData.expiresAfterSeconds)
  }
  return (
    <form onSubmit={handleSubmit}>
      <div className="form-row">
        <div className="form-group col-md-8">
          <label htmlFor="formItemName">Item name</label>
          <input
            type="text"
            className="form-control"
            id="formItemName"
            aria-describedby="itemNameHelp"
            placeholder="yummy food"
            value={itemData.name}
            onChange={(e) => { setItemData({ ...itemData, name: e.target.value }) }}
          />
          <small id="itemNameHelp" className="form-text text-muted">
            We don't want more than one piece of the same food in our fridge.
        </small>
        </div>
      </div>
      <div className="form-row">
        <div className="form-group col-sm-3">
          <label htmlFor="formExpiresAfterSeconds">Expires after</label>
          <div className="input-group">
            <input
              type="text"
              className="form-control"
              id="formExpiresAfterSeconds"
              aria-label="Expires in"
              aria-describedby="basic-addon2"
              value={itemData.expiresAfterSeconds}
              onChange={(e) => { setItemData({ ...itemData, expiresAfterSeconds: e.target.value }) }}
            />
            <div className="input-group-append">
              <span className="input-group-text" id="basic-addon2">
                seconds
            </span>
            </div>
          </div>
        </div>
      </div>
      <button type="submit" className="btn btn-primary" onClick={fetchItems}>
        Submit
    </button>
    </form>
  )
};
  

Редактировать — полная ошибка

 TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'FiberNode'
    |     property 'stateNode' -> object with constructor 'HTMLButtonElement'
    --- property '__reactInternalInstance$xcvrnuhmmp' closes the circle
  

Ответ №1:

попробуйте с

 body: JSON.stringify({
  name : name,
  expiresAfterSeconds : expiresAfterSeconds
})