Nextjs useEffect 和 useState 挂钩在生产中不起作用

ST8*_*T80 4 javascript reactjs next.js

在我的nextjs-app 中,我使用useEffectuseState-hooks 来获取一些数据:

export default function PricingBlock({ data }) {
  const [pricingItems, setPricingItems] = useState()
  const [featuredItem, setFeaturedItem] = useState()

  useEffect(() => {
    const getPricingItems = async () => {
      const pricingItems = await request({ query: PRICING, variables: {} })
      const items = await pricingItems?.allSpecialistPages
      const featured = pricingItems?.specialistLandingpage?.card[0]
      setPricingItems(items)
      setFeaturedItem(featured)
   }
    getPricingItems()
  }, [featuredItem, pricingItems])

 return (
   <div>
     <div
       style={{
         backgroundColor: featuredItem?.backgroundColor?.hex,
         backgroundImage: `url(${featuredItem?.backgroundImage?.url})`,
         borderTop: '1px solid ' + featuredItem?.backgroundColor?.hex,
         borderLeft: '1px solid ' + featuredItem?.backgroundColor?.hex,
         borderRight: '1px solid ' + featuredItem?.backgroundColor?.hex,
       }}
     > ... </div>
   </div>
 )
}
Run Code Online (Sandbox Code Playgroud)

当我在本地运行它时,它工作正常,但是当我运行时- 我收到npm run build错误Object is possibly 'undefined'.featuredItem

我也尝试这样做:

const [featuredItem, setFeaturedItem] = useState({}) - as an object
Run Code Online (Sandbox Code Playgroud)

但后来我得到了错误Property 'backgroundColor' does not exist on type '{}'.

我该如何解决这个问题?有人可以帮我吗?

olg*_*aga 5

这是由于 TypeScript 错误造成的。这段代码:

const [featuredItem, setFeaturedItem] = useState()
Run Code Online (Sandbox Code Playgroud)

没有定义 的类型featuredItem,因此它没有第一个访问的属性 ( backgroundColor)。

修复它,或者在您的 中next.config.js临时添加以下内容:

module.exports = {
  ...
  typescript: {
    ignoreBuildErrors: true,
  },
}
Run Code Online (Sandbox Code Playgroud)