umijs / hox

State sharing for React components.
https://hox.js.org
MIT License
1.45k stars 100 forks source link

在Provider外部设置children的属性,children不更新 #97

Closed ousiri closed 1 year ago

ousiri commented 2 years ago

如果在Provider外部设置children的属性,因为IsolatorInner和StoreExecutor使用memo,导致children不更新。即使设置了memo: false。

重现Repo:https://github.com/ousiri/hox-vite-demo 重现步骤:

  1. npm i
  2. npm run dev
  3. 访问 http://127.0.0.1:5173/
  4. 点击"click to change",会发现下面的UserInfo数据不更新 关键代码:src/App.tsx
const [useUserStore, UserStoreProvider] = createStore(() => {
  return {}
}, { memo: false });

const UserInfo: FC<{ name: string }> = ({ name }) => {
  return <div>{name}</div>
}

function App() {
  const [name, setName] = useState('Demo')

  return (
    <div className="App">
      <UserInfo name={name} /> // 可以正常更新
      <button onClick={() => setName('Demo2')}>click to change</button>
      <UserStoreProvider>
        <UserInfo name={name} /> // 点击后不更新
      </UserStoreProvider>
    </div>
  )
}
gracezlj commented 1 year ago

同样遇到了该问题😶

AimWhy commented 1 year ago

找到解决方式了么?

image

看代码是这里的问题

codering commented 1 year ago

@awmleer 这个问题可以解决吗?

houseBetter commented 1 year ago

解决了吗

DFNJKD-98 commented 1 year ago

应该还没有解决,呜呜呜,排了半天的bug,才发现是这里的问题

awmleer commented 1 year ago

非常抱歉拖到现在才修复掉…… ce5f452

已经在 2.1.1 版本发布