Skip to content

Cannot get new state if in conditional render ( really tricky ) #88

Open
@WreewanMorhee

Description

teaful: 0.10.0
node: v15.14.0
npm : 7.7.6

import { useEffect, useState } from 'react'
import createStore from 'teaful'
import './App.css'
import ErrorBoundary from './components/ErrorBoundary'

const initialStore = {
	number: 0,
}
export const { useStore } = createStore(initialStore)

function App() {
	const [show, set_show] = useState(false)
	useEffect(() => {
		set_show(true)
	}, [])

	return (
		<ErrorBoundary>
			<div className="App">
				<AA />
				<CC />

				{/* {show && (
					<>
						<AA />
						<CC />
					</>
				)} */}
			</div>
		</ErrorBoundary>
	)
}

const AA = () => {
	const [number] = useStore.number()
	console.warn(number, 45678)

	return number
}

const CC = () => {
	const [number, set_number] = useStore.number()
	if (!number) {
		set_number((prev) => prev + 1)
	}

	return 'c'
}

export default App

works well works fine

BUT
if I put AA and CC into conditional render and other code just stay the same:

import { useEffect, useState } from 'react'
import createStore from 'teaful'
import './App.css'
import ErrorBoundary from './components/ErrorBoundary'

const initialStore = {
	number: 0,
}
export const { useStore } = createStore(initialStore)

function App() {
	const [show, set_show] = useState(false)
	useEffect(() => {
		set_show(true)
	}, [])

	return (
		<ErrorBoundary>
			<div className="App">
				{/* <AA />
				<CC /> */}

				{show && (
					<>
						<AA />
						<CC />
					</>
				)}
			</div>
		</ErrorBoundary>
	)
}

const AA = () => {
	const [number] = useStore.number()
	console.warn(number, 45678)

	return number
}

const CC = () => {
	const [number, set_number] = useStore.number()
	if (!number) {
		set_number((prev) => prev + 1)
	}

	return 'c'
}

export default App

AA cannot get new number anymore
WHY !?

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions