Состояние использования показывает разное поведение между локальным/производственным с одним и тем же кодом

#node.js #reactjs #express #react-hooks #use-effect

#node.js #реагирует на #экспресс #реагируют-крючки #эффект использования

Вопрос:

У меня есть следующая функция в React:

 async function getImages() {  try {  const res = await axios.get(process.env.REACT_APP_SERVER   '/gallery')  if (res.status !== 304) await setImagesDATA(res.data) // imagesDATA is const[imagesDATA, setImagesDATA] = useState([])  } catch (error) {  console.log(error)  alert(error)  }  }   

который получает следующий ответ с моего экспресс-сервера:

 router.get('/', function(req, res, next) {  ftp.list(FTPPath, (error, list) =gt; {  if (error) {  throw error  } else {  const files = list.map((item,i) =gt; {  return(  {  id: i,  name: item.name,  path: FTPHost   item.name,  size: item.size  }  )  })  res.send(files)  }  ftp.end()  })  ftp.connect(FTPConfig) });  

который запускается с помощью:

 useEffect(() =gt; {  getImages();  }, [])  

и это работает как на производстве, так и на местном уровне. НО я знаю, что в моем коде есть проблемы, потому что: Когда я пытаюсь использовать useEffect(() =gt; {getImages()}) массив без пустых зависимостей в конце [] , код отлично работает на локальном сервере, но точно такой же код выходит из строя в режиме онлайн в рабочей среде, потому getImages() что запускает повторную визуализацию, даже если код состояния равен 304 и не происходит изменения состояния, что приводит useEffect() к повторному запуску в бесконечном цикле. Я не понимаю, почему getImages() запускает повторный рендеринг, даже когда ничего не меняется, и что меня еще больше смущает, так это то, почему это не происходит в локальной среде, которая совершенно идентична? Одно ли обещание вызывает повторную визуализацию? Как я должен это правильно реализовать?

Ответ №1:

Вы не указали, добавили ли вы переменную среды REACT_APP_SERVER в то место, где вы размещаете код, или нет.

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

Комментарии:

1. привет, как я уже упоминал, код уже работает нормально, так что переменная env не является проблемой! моя проблема описана в нижней части вопроса

2. Вы не предоставляете никаких дополнительных сведений, кроме того, что он работает локально, а не на сервере. Как еще, если вы даже не завершили сообщение об ошибке, предполагается расшифровать, в чем заключается ваша проблема, кроме того, что вы, возможно, забыли или неправильно добавили переменные среды.

3. я указал, что код аварийно завершается, когда я опускаю пустой массив зависимостей от useEffect (с асинхронной функцией) или приводит к бесконечному циклу (с обычным обещанием), поэтому моя проблема в том, что useEffect ведет себя по-другому на рабочем сервере. Кстати, я развертываюсь на Heroku