#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