结构:如何使用mobx-state-tree表示搜索输入,搜索查询和搜索结果?

时间:2018-06-09 14:02:00

标签: reactjs mobx mobx-state-tree

我使用mobx-state-tree获得了一个目前只有几个简单商店的应用:

  • Article代表一篇文章,通过第三方API提供或内部编写
  • ArticleStore包含对文章的引用:{ articles: {}, isLoading: bool }

简单场景

此设置适用于简单的用例,例如根据ID获取文章。 E.g。

  1. 用户导航至/article/{articleUri}
  2. articleStoreInstance.fetch([articleUri])返回有问题的文章
  3. 在渲染功能中拾取ID,并使用articleStoreInstance.articles.get(articleUri)
  4. 渲染

    复杂场景

    对于更复杂的场景,如果我想根据复杂查询获取一组文章,例如{ offset: 100, limit: 100, freeTextQuery: 'Trump' },我应该:

    1. 拥有一个全局SearchResult商店,该商店只链接到用户搜索过的文章
    2. 在我需要的时候实例化一次性SearchResult商店?
    3. 将查询和常规UI状态完全保留在商店之外?
    4. 我应该补充一点,我希望在页面加载之间将文章保留在商店中,以避免反复重新获取相同的内容。

      是否有一种解决此问题的标准化方法?有什么例子可以看吗?

1 个答案:

答案 0 :(得分:0)

您可能需要一个 private static void SendBytesToPrinter(string printerName, IntPtr pointerBytes, int bytesCount) { int written = 0; PrintResult printResult = new PrintResult(); IntPtr pointerPrinter = new IntPtr(0); DOCINFOA docInfo = new DOCINFOA(); bool success = false; docInfo.DocName = "RAW Document"; docInfo.DataType = "RAW"; try { if (OpenPrinter(printerName.Normalize(), out pointerPrinter, IntPtr.Zero)) { if (StartDocPrinter(pointerPrinter, 1, docInfo)) { if (StartPagePrinter(pointerPrinter)) { success = WritePrinter(pointerPrinter, pointerBytes, bytesCount, out written); EndPagePrinter(pointerPrinter); } EndDocPrinter(pointerPrinter); } // READ HERE Int32 bufLen = 32; IntPtr pStatus = Marshal.AllocCoTaskMem(bufLen); Int32 statusLen = 0; bool bSuccess = ReadPrinter(hPrintJob, pStatus, bufLen, out statusLen); ClosePrinter(pointerPrinter); } } catch (Exception ex) { } } 商店来跟踪以下信息:

  • 查询参数(偏移量,限制等)
  • 查询结果(最后一次搜索的结果)
  • (可选)查询状态(正在加载)

然后,为了避免将文章存储在2个地方,查询结果不应使用Search模型,而应引用Article模型。每次查询时,实际结果将保存在现有存储区Article中,而ArticleStore仅保存引用:

Search

希望这就是您想要的。