Условно импортируйте модуль с помощью следующего динамического импорта js, SSR не работает

#reactjs #webpack #next.js

Вопрос:

У меня есть компонент, который я динамически импортирую с помощью dynamic nextjs. И это тоже, я хочу загрузить пакет на основе флага, который я устанавливаю в своем коде (флаг loadWirelessBundle в блоке кода ниже). Таким образом, он отлично работает с точки зрения загрузки пакета, но и рендеринга компонента, НО он не выполняет рендеринг компонента на стороне сервера (когда значение loadWirelessBundle равно true), даже если я передаю ssr = true. Кто-нибудь знает, почему он не выполняет рендеринг на стороне сервера?

 const WirelessPrepaid = loadWirelessBundle ? dynamic(() => import("../wireless-prepaid"), { ssr: true }) : () => null;
 

Есть ли что-то, чего мне не хватает с точки зрения понимания динамического импорта с помощью nextjs? Не мог бы кто-нибудь, пожалуйста, помочь? Спасибо!

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

1. Можете ли вы уточнить, как вы установили loadWirelessBundle флаг?

Ответ №1:

Вам нужно выполнить импорт на верхнем уровне

 // this goes at the top level of the module
const WirelessPrepaidDynamicComponent = dynamic(() => import("../wireless-prepaid"));

// this can be placed wherever you need it

const WirelessPrepaid = loadWirelessBundle ? WirelessPrepaidDynamicComponent  : () => null;


 

Ответ №2:

Во-первых, он не обязательно должен передаваться ssr как true явный, по умолчанию он включен только.

Во-вторых, может быть так, что значение loadWirelessBundle задано на стороне клиента, а не на стороне сервера, поэтому компонент импортируется на стороне клиента. Поэтому нам, возможно, придется установить его значение на стороне сервера и посмотреть, работает ли оно.