zhangyuang / ssr

A most advanced ssr framework support React17/React18/Vue2/Vue3 on Earth that implemented serverless-side render specification.
http://doc.ssr-fc.com/
MIT License
2.61k stars 284 forks source link

ssr后className使用三目运算后会报错 #111

Closed wuyiifan closed 3 years ago

wuyiifan commented 3 years ago

提问前请确认以下几点信息,否则你的问题将不会被解答

详细描述你的问题

const path = __isBrowser__ ? props.match.path : ''

 <div className="main-menu">
  {
    menuList.main.map(item => (
      // <Link to={item.link} className={`${styles['nav-item']} ${styles.active}`} key={item.text}>
      <Link to={item.link} className={path === item.link ? `${styles['nav-item']} ${styles.active}` : styles['nav-item']} key={item.text}>
        <MyIcon className={styles.icon} size="md" name={item.icon}></MyIcon>
        <span className={styles.text}>{item.text}</span>
      </Link>
    ))
  }
</div>

image

如果不使用三目运算直接<Link to={item.link} className={${styles['nav-item']} ${styles.active}} key={item.text}>,是正常的。

期望的结果

className上能够使用三木运算的方式,

当前使用的版本

复现仓库地址

你本人对问题可能的原因判断(如果你能大概判断的话)

next.js的解决方案是这样的https://binyamin.medium.com/solving-the-styled-components-warning-in-next-js-with-babel-83080e45a0ff

在本框架使用后没有生效,期待恢复。

zhangyuang commented 3 years ago
// fetch.ts

export default (props) => {
return {
path:  __isBrowser__ ? props.match.path : props.request.path
}
// render.tsx

  const { state, dispatch } = useContext<IContext<any>>(window.STORE_CONTEXT)
const path = state.path

}
zhangyuang commented 3 years ago

你发的这个链接讲的是框架在同一场景统一逻辑业务代码下的server/client hash生成规则不一样

你这个错误跟hash规则一点关系都没有,你的业务代码在server/client的逻辑都不一致

zhangyuang commented 3 years ago

and 你可以把你的代码放在 useEffect 里面去更新 state

wuyiifan commented 3 years ago

感谢