Почему в Redux обычно / хорошей практикой является использование действия REQUEST, которое изменяет состояние? (например, очищает его, устанавливает загрузку: true, отметка времени и т. д.) и т. д. Если да, то почему выполняется действие REQUEST? Почему бы не пропустить действие REQUEST и просто обновить SUCCESS / FAILURE, чтобы предотвратить повторный рендеринг?
blockquote>Один из примеров: представьте, что у вас есть компонент, который требует данные, которые необходимо получить из API , На веб-интерфейсе вы хотели бы иметь индикатор загрузки бар. Вы сможете отобразить эту полосу загрузки, только если знаете, что запросили вызов.
Представьте, что мы делаем это без индикатора ЗАПРОС / ЗАГРУЗКА: если пользователь уже был на этой странице с компонентом, который вызывает запрос и возвращается снова, состояние (FAILURE / SUCCESS) уже было бы установлено. Это означает, что если предыдущее состояние было «FAILURE», и вы рендерили свой компонент в зависимости от этого состояния, то сначала будет отображаться ваш «FAILURE» рендеринг. И затем, это может быть обновлено с вашим рендером УСПЕХА. Для пользователя это приведет к переключению с сообщения об ошибке / страницы на страницу результатов или наоборот, что действительно является плохим UX.
У меня была такая же проблема с FixedDocuments. Если вы конвертируете свой FixedDocument в XPS-документ, он работает нормально.
Пример создания XPS-документа в памяти из FixedDocument, а затем его отображения в DocumentViewer.
// Add to xaml: <DocumentViewer x:Name="documentViewer" />
// Add project references to "ReachFramework" and "System.Printing"
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.IO;
using System.IO.Packaging;
using System.Windows.Xps.Packaging;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// Set up demo FixedDocument containing text to be searched
var fixedDocument = new FixedDocument();
var pageContent = new PageContent();
var fixedPage = new FixedPage();
fixedPage.Children.Add(new TextBlock() { Text = "Demo document text." });
pageContent.Child = fixedPage;
fixedDocument.Pages.Add(pageContent);
// Set up fresh XpsDocument
var stream = new MemoryStream();
var uri = new Uri("pack://document.xps");
var package = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite);
PackageStore.AddPackage(uri, package);
var xpsDoc = new XpsDocument(package, CompressionOption.NotCompressed, uri.AbsoluteUri);
// Write FixedDocument to the XpsDocument
var docWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
docWriter.Write(fixedDocument);
// Display XpsDocument in DocumentViewer
documentViewer.Document = xpsDoc.GetFixedDocumentSequence();
}
}
}
Я испытал затруднения искать текст в richtextbox, это было слишком медленно. То, что я сделал, было уплотнить xaml каждый раз, когда я хотел искать. Я улучшил несколько порядков величины.
Это - большое обходное решение, базирующееся в части книги Chris Anderson.
Удачи