hox icon indicating copy to clipboard operation
hox copied to clipboard

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

Open ousiri opened this issue 2 years ago • 0 comments

如果在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>
  )
}

ousiri avatar Sep 19 '22 03:09 ousiri