Cha*_*wis 5 javascript relay reactjs
我遇到了一个我似乎无法解决的问题。当我使用QueryRenderer中继中的HOC 组件并通过反应上下文将其渲染为子级时,我收到以下错误:
Cannot update a component (`Customers`) while rendering a different component (`Search `). To locate the bad setState() call inside `Search`, follow the stack trace as described in https://reactjs.org/link/setstate-in-render
Run Code Online (Sandbox Code Playgroud)
我的上下文和组件非常简单。一旦我更换了QueryRenderer这个问题就会消失,所以我 100% 肯定这个 HOC 组件导致了这个问题。
//context
const SearchProvider = ({ getVariables, query, children }) => {
const [searchTerm, setSearchTerm] = useState()
return (
<SearchContext.Provider value={{ searchTerm, setSearchTerm }}>
<Search getVariables={getVariables} query={query}>
{children}
</Search>
</SearchContext.Provider>
)
}
Run Code Online (Sandbox Code Playgroud)
//component causing the error
const Search = ({ getVariables, query, setRetry, children }) => {
const { searchTerm } = useSearch()
return (
<QueryRenderer
environment={environment}
query={query}
variables={{ ...getVariables(searchTerm) }}
render={({ error, props, retry }) => children({ error, props, retry })}
/>
)
}
Run Code Online (Sandbox Code Playgroud)
//and for context the component that is rendering the SearchProvider component
const Customers = () => {
const getVariables = searchTerm => {
//work out and return variables
}
return (
<>
<h1 className="text-xl mb-2">Customers</h1>
<SearchProvider query={query} getVariables={getVariables}>
{({ error, props }) => {
if (error) return <Error />
if (!props) return <Loading />
return (
<ul className="flex flex-wrap w-full mt-4">
{props.users_connection.edges.map(({ node }) => (
<Customer key={node.userId} customer={node} />
))}
</ul>
)
}}
</SearchProvider >
</>
)
}
Run Code Online (Sandbox Code Playgroud)
非常感谢任何建议或提示。现在我只是忍受错误。我没有注意到它会影响性能或引入任何错误。
我试过QueryRenderer直接在SearchProvider组件中移动组件,但没有任何区别。
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |