如何在 React 中强制渲染组件
How to force component render in React
我正在对一个 API 进行简单的 ajax 调用,它每 5 秒生成一次数据,使用 observables 正确接收数据,并且数据状态按预期更新。
问题是:页面在加载时只呈现一次,而不是在使用 setData 函数更改日期时呈现。如果我通过导航到另一个 link 重新加载页面,然后返回数据显示如预期
她是密码:
function MyComponent() {
const [data, setData] = useState(RxJSStore.getData())
useEffect(() => {
RxJSStore.addChangeListener(onChange);
if (data.length === 0) loadDataRxJSAction()
return () => RxJSStore.removeChangeListener(onChange)
}, [data.length])
function onChange() {
setData(RxJSStore.getData())
}
return (
<>
<List data={data} />
</>
)
}
有一种解决方法,就是在每次调用 onChange 方法时强制组件呈现。文档中写道,这只能用于测试目的,但由于情况没有其他解决方案,这可能是该用例的解决方案。
import { useRefresh } from 'react-tidy'
function MyComponent() {
const [data, setData] = useState(RxJSStore.getData())
const refresh = useRefresh()
useEffect(() => {
RxJSStore.addChangeListener(onChange);
if (data.length === 0) loadDataRxJSAction()
return () => RxJSStore.removeChangeListener(onChange)
}, [data.length])
function onChange() {
setWarnings(RxJSStore.getWarnings())
refresh()
}
return (
<>
<List data={data} />
</>
)
}
我正在对一个 API 进行简单的 ajax 调用,它每 5 秒生成一次数据,使用 observables 正确接收数据,并且数据状态按预期更新。 问题是:页面在加载时只呈现一次,而不是在使用 setData 函数更改日期时呈现。如果我通过导航到另一个 link 重新加载页面,然后返回数据显示如预期 她是密码:
function MyComponent() {
const [data, setData] = useState(RxJSStore.getData())
useEffect(() => {
RxJSStore.addChangeListener(onChange);
if (data.length === 0) loadDataRxJSAction()
return () => RxJSStore.removeChangeListener(onChange)
}, [data.length])
function onChange() {
setData(RxJSStore.getData())
}
return (
<>
<List data={data} />
</>
)
}
有一种解决方法,就是在每次调用 onChange 方法时强制组件呈现。文档中写道,这只能用于测试目的,但由于情况没有其他解决方案,这可能是该用例的解决方案。
import { useRefresh } from 'react-tidy'
function MyComponent() {
const [data, setData] = useState(RxJSStore.getData())
const refresh = useRefresh()
useEffect(() => {
RxJSStore.addChangeListener(onChange);
if (data.length === 0) loadDataRxJSAction()
return () => RxJSStore.removeChangeListener(onChange)
}, [data.length])
function onChange() {
setWarnings(RxJSStore.getWarnings())
refresh()
}
return (
<>
<List data={data} />
</>
)
}