【问题标题】:Re-Rendering of ReactiveList ResultsReactiveList 结果的重新渲染
【发布时间】:2020-04-11 17:05:08
【问题描述】:

我正在尝试使用响应式搜索库构建搜索引擎。有人知道我如何触发 ReactiveList 结果的重新渲染吗? (例如,使用按钮 onClick 事件?)

【问题讨论】:

  • 你能分享你的代码以便更好地理解吗?

标签: reactjs reactivesearch


【解决方案1】:

如果你有类组件,请试试下面的代码

this.forceUpdate();

【讨论】:

【解决方案2】:

很遗憾,我无法在此处提供我的完整代码。但我会尝试解释我的问题是什么。在我的主要应用程序组件中,我确实有 ReactiveBase、DataSearch 和 ReactiveList 以及几个按钮:

const App = () => (
  <ReactiveBase
   app="Test"
   credentials="null"
   url="http://localhost:9200"
   analytics={false}
   searchStateHeader
   >
   <DataSearch />
   <ReactiveList
   componentId="result"
   dataField="_score"
   renderItem={renderItem}
   >
<div><Switch defaultChecked onChange={onSpeciesChange} style={{ marginRight: '5px', background: "brown" }} id="cellines"/> <label> Celline </label></div>
<div><Switch defaultChecked onChange={onSpeciesChange} style={{ marginRight: '5px', background: "blue" }} id="chemicals"/> <label> Chemicals </label></div>

所以按钮在我的主 App 组件中呈现,我确实有一个 onSpeciesChange 函数,它基本上用布尔值更新一个名为 entityswitchstatus 的全局对象:

function onSpeciesChange(checked,event) {
  if (event.target.id === "cellines") { entityswitchstatus.cellines=checked; }
  else if (event.target.id === "chemicals") { entityswitchstatus.chemicals=checked; }
  else if (event.target.id === "diseases") { entityswitchstatus.diseases=checked; }
  else if (event.target.id === "genes") { entityswitchstatus.genes=checked; }
  else if (event.target.id === "mutations") { entityswitchstatus.mutations=checked;}
  else if (event.target.id === "species") { entityswitchstatus.species=checked; }
  console.log(entityswitchstatus);
}

在 ReactiveList 组件的 renderItem 函数中,我正在处理来自 Elasticsearch 的响应。如果有某个字段并且全局 entityswitchstatus 为真,我会突出显示弹性搜索响应的另一个字段。这一切都发生在 ReactiveList 的 renderItem 函数中。

function renderItem(res) {
if (res.ptc_species && entityswitchstatus.species) { var species_classname = createHighlighClassObject(res.ptc_species,"species"); } else { res.ptc_species = [] }
}

基本上通过单击按钮,我当然可以更改全局对象实体开关状态。但这不会导致 ReactiveList 组件的重新渲染,这也是预期的。我不能将任何额外的道具传递给 renderItem 或者至少我不知道如何。所以我的想法是通过单击主 App 组件中的按钮来简单地调用 ReactiveList 组件的重新渲染。

希望这不会太混乱。

【讨论】:

猜你喜欢
  • 2020-06-13
  • 2020-05-02
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
相关资源
最近更新 更多