无法使用 setState 更改值
unable to change the value using setState
我正在使用 React.js 但我无法实现更改变量 test
的值。
这里是App.js的代码:
function App() {
const [test, setTest] = useState(false);
return (
<div className="App">
<myNavBar handleTest={(test) => setTest(test)} />
<div>
{test ? <Test/> : null}
</div>
</div>
);
}
export default App;
和myNavBar.js的代码:
const myNavBar = (props) => {
const handleTest = (value) => {
props.handleTest(value);
}
return (
<>
<Navbar bg="white">
<Navbar.Brand>Test</Navbar.Brand>
<Nav>
<Nav.Link href="/" onSelect={() => {handleTest(false)}}>Home</Nav.Link>
<Nav.Link href="/test" onSelect={() => {handleTest(true)}}>Test</Nav.Link>
</Nav>
</Navbar>
</>
)
}
export default myNavBar;
我想我丢失了对 test
值的修改,它总是等于 false
你能帮帮我吗?
非常感谢!
组件必须以大写字母开头。
代码有效,但当您单击 link 时,页面会导航。如果您取消活动,它会按预期工作。
https://codesandbox.io/s/react-playground-forked-yiqre?file=/index.js
简而言之:
<Nav.Link
href="/"
onSelect={(_, e) => {
e.preventDefault();
handleTest(false);
}}
>
清理完毕,导航到位:
https://codesandbox.io/s/react-playground-forked-6vch3?file=/index.js
您正在尝试进行 SPA,但它目前不是 SPA。您离开具有更新状态的页面。当新页面加载 (/test) 时,您的状态将重置。
有多种方法可以创建实际的 SPA,您可以在其中为每个页面定义一个组件:您可以使用多种路由解决方案中的任何一种,还有基于挂钩的解决方案等。
此外,代码沙箱中没有 /test
路径,所以它不知道该怎么做。
我正在使用 React.js 但我无法实现更改变量 test
的值。
这里是App.js的代码:
function App() {
const [test, setTest] = useState(false);
return (
<div className="App">
<myNavBar handleTest={(test) => setTest(test)} />
<div>
{test ? <Test/> : null}
</div>
</div>
);
}
export default App;
和myNavBar.js的代码:
const myNavBar = (props) => {
const handleTest = (value) => {
props.handleTest(value);
}
return (
<>
<Navbar bg="white">
<Navbar.Brand>Test</Navbar.Brand>
<Nav>
<Nav.Link href="/" onSelect={() => {handleTest(false)}}>Home</Nav.Link>
<Nav.Link href="/test" onSelect={() => {handleTest(true)}}>Test</Nav.Link>
</Nav>
</Navbar>
</>
)
}
export default myNavBar;
我想我丢失了对 test
值的修改,它总是等于 false
你能帮帮我吗?
非常感谢!
组件必须以大写字母开头。
代码有效,但当您单击 link 时,页面会导航。如果您取消活动,它会按预期工作。
https://codesandbox.io/s/react-playground-forked-yiqre?file=/index.js
简而言之:
<Nav.Link
href="/"
onSelect={(_, e) => {
e.preventDefault();
handleTest(false);
}}
>
清理完毕,导航到位:
https://codesandbox.io/s/react-playground-forked-6vch3?file=/index.js
您正在尝试进行 SPA,但它目前不是 SPA。您离开具有更新状态的页面。当新页面加载 (/test) 时,您的状态将重置。
有多种方法可以创建实际的 SPA,您可以在其中为每个页面定义一个组件:您可以使用多种路由解决方案中的任何一种,还有基于挂钩的解决方案等。
此外,代码沙箱中没有 /test
路径,所以它不知道该怎么做。