反应条件渲染无法从状态中识别出 true
React conditional rendering not recognising true from state
所以我有这个带有条件的简单函数 return:
export default function App() {
const appState = useState({
signed: true,
user: {
login: null,
password: null,
rights: null,
},
});
return <div className="app">{appState.signed ? "does not" : "work"}</div>;
}
问题是代码总是return“有效”。
不能用state条件渲染吗?
useState
挂钩为您提供了一个包含状态值和 setter 方法的数组。
问题是您正在访问 useState
返回的数组,而您无法访问 signed
它导致 false
使文本 'work'待展示
所以改为这样做
export default function App() {
const [appState, setAppState] = useState({
signed: true,
user: {
login: null,
password: null,
rights: null,
},
});
return <div className="app">{appState.signed ? "does not" : "work"}</div>;
}
useState hook returns 一个长度为 2 的数组。
const [appState, changeAppState ] = useState({
signed: true,
user: {
login: null,
password: null,
rights: null,
},
});
...
//To change signed to true, try using the callback pattern
changeAppState ((prevAppState) => ({
...prevAppState,
signed: false
}));
//You can do this, but callback approach is safer
changeAppState ({
...prevAppState,
signed: false
});
所以我有这个带有条件的简单函数 return:
export default function App() {
const appState = useState({
signed: true,
user: {
login: null,
password: null,
rights: null,
},
});
return <div className="app">{appState.signed ? "does not" : "work"}</div>;
}
问题是代码总是return“有效”。 不能用state条件渲染吗?
useState
挂钩为您提供了一个包含状态值和 setter 方法的数组。
问题是您正在访问 useState
返回的数组,而您无法访问 signed
它导致 false
使文本 'work'待展示
所以改为这样做
export default function App() {
const [appState, setAppState] = useState({
signed: true,
user: {
login: null,
password: null,
rights: null,
},
});
return <div className="app">{appState.signed ? "does not" : "work"}</div>;
}
useState hook returns 一个长度为 2 的数组。
const [appState, changeAppState ] = useState({
signed: true,
user: {
login: null,
password: null,
rights: null,
},
});
...
//To change signed to true, try using the callback pattern
changeAppState ((prevAppState) => ({
...prevAppState,
signed: false
}));
//You can do this, but callback approach is safer
changeAppState ({
...prevAppState,
signed: false
});