gpt4 book ai didi

javascript - 在没有关系的 React 组件之间共享数据?

转载 作者:行者123 更新时间:2023-12-03 01:12:03 25 4
gpt4 key购买 nike

我正在开发一个 React 组件库,它允许通过传递对象数组和 <input/> 来进行客户端数据过滤。作为 <SearchFilter/> 的 Prop 成分。我想将过滤后的结果返回到单独的 <SearchResults/>可以在树中的其他位置呈现的组件(即结果组件不必是输入组件的子组件)。

我已经弄清楚了过滤,但我不确定在 React 中将过滤后的数据获取到 <SearchResults/> 的最佳路线组件。

这就是我想要的结果......

<SearchFilter
data={data}
input={<input type="text" value={value} onChange={this.handleChange}/>}
/>

然后,使用 Render Props 返回数据并映射该数据以返回 JSX,就会有结果组件。像这样的事情...

<SearchResults 
render={data => (
data.map(el => (
<div>
<span>{data.someProperty}</span>
</div>
)
)}
/>

这就是我想要实现的目标,因为我想允许渲染 <SearchFilter/>组件位于树中的一处,并允许 <SearchResults/>组件在其他地方渲染,这样树的组成方式以及 View 的渲染方式就有最大的灵 active 。

我已经研究了 Context API,但似乎这需要更多组件才能成为我的库的一部分,这使我想要实现的目标进一步复杂化。如果这是唯一的解决办法,那很好,但我想问问是否有人能想到其他解决方案。

谢谢!

最佳答案

更大的问题是,您将需要管理在更高级别的组件之间共享的状态,即最终将包装这两个组件的任何组件。使用普通的 React,此状态将由父(或祖先)组件管理,并将相关值作为 props 传递下来。这与让兄弟组件影响彼此状态的想法(通常是糟糕的)相反,因为你很容易陷入“谁是这里的老大”的问题。

Context API 处理的事情是不必为通常不会改变的事情传递 props(或者:通常不应该导致渲染经常触发)。

全局状态存储(例如 Redux)可以帮助您对此进行建模,但本质上它只不过是管理状态的“一个”组件,以及根据该状态呈现的其他组件。下层组件中的事件会触发数据的变化,从而导致状态发生变化,从而导致子组件的 props 发生变化,从而导致重新渲染。

我建议您尝试使用这个简单的模式:

class Search ... {
state = {data: [], text: ""}

render() {
return (
<div>
<SearchFilter
data={this.state.data}
onSearch={() => this.fetchNewData()}
onChange={(e) => this.setState({text: e.targetElement.value})}
text={this.state.text}
/>
<SearchResults data={this.state.data} />
</div>
);
}

fetchNewData() {
fetch('/url?text=' + this.state.text)
.then((newData) => { this.setState({data: newData}); })
}
}

大致上是这样的。如果您在建模此类内容时遇到困难,您可以使用 Redux 强制您以类似的方式进行操作,并避免管理本地状态与全局状态的混合(这通常是难以管理的事情)。

如果你做得正确,没有状态的组件(即不负责管理状态,因此没有事件处理程序)都可以成为纯组件,即无状态组件,即基于 props 返回 JSX 的函数:

const SearchResults = ({data}) => <div>{data.map( () => <etc /> )}</div>

关于javascript - 在没有关系的 React 组件之间共享数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52173330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com