Nano Hash - криптовалюты, майнинг, программирование

значение не обновляется после вызова саги

Я использую react-redux вместе с redux-saga. теперь у меня проблема с тем, что у меня есть Modal, который обновляет несколько значений и несколько раз нажимает на сохранение вызовов саги и отражает обновленное значение на странице. но при нажатии кнопки «Сохранить» значение на странице не обновляется. Мне нужно что-то сделать, чтобы перезагрузить страницу, т.е. обновить, но в идеале мой DOM должен повторно отображать его, не так ли? вот моя сага

import { call, put } from 'redux-saga/effects';
import { update } from '../services/api';
import * as types from '../constants/actionTypes';

export default function* updateSaga({ value }) {
    try {

        const updateData = yield value.map(data =>{ 

            return (call(update,data))}
    )

        yield [
            put({ type: types.UPDATES, updateData: updateData })

        ]
    } catch (error) {
        console.log("porfilingerror",error);
        yield put({
            type: 'FETCH_UPDATE_ERROR',
            error
        });
    }
}

вот мой редуктор

case types.UPDATES:
       for(var i = 0;i<highestData.channel_mix.length;i++){
           for(var j= 0;j<action.updateData.length;j++){
               if(highestData.mix[i].pk === action.updateData[j].pk){
                   highestData.mix[i].volume = action.updateData[j].volume;
                   break;
               }
           }
       }

        dashboard_data[0].mix = highestData.mix;

        return {...state,
            highestProfiledata:highestData,
            program_data: dashboard_data

        }

РЕДАКТИРОВАТЬ 1:

вот мой код компонента

console.log("rendering....")
return (
      <div id="otherProgram">
        <div className="panel panel-default">
          <div className="panel-heading panel-head">
            <h3 className="panel-title">OTHER DETAILS</h3>
            <Button
              onClick={() =>
                this.setState({
                  open: !this.state.open
                })}
            >
              <Glyphicon
                glyph={
                  this.state.open
                    ? 'glyphicon glyphicon-minus'
                    : 'glyphicon glyphicon-plus'
                }
              />
            </Button>
          </div>

          <Collapse in={this.state.open}>
            <Well>
              <div className="row other_pgm_data">
                <div className="col-md-4">
                  <h5> Mix</h5>
                  <div className="other_data_mix">
                    <table className="table table-bordered">
                      <thead>
                        <th />
                        <th>
                          {this.props.Data.year
                            .toString()
                            .substr(0, 4)}{' '}
                          mix
                        </th>
                        <th> Vol. growth </th>
                        <th> Volume </th>
                      </thead>

                      <tbody>
                        {this.props.profileData.mix.map(data =>
                          <tr>
                            <td>
                              {data.name}
                            </td>
                            <td>
                              {' '}{Math.round(data.volume * 100)}%{' '}
                            </td>
                            <td> {data.volume_growth}%</td>

                          </tr>
                        )}
                      </tbody>
                    </table>
                  </div>

  • Если вы обновляете свое состояние и есть какие-либо изменения в состоянии, И вы ссылаетесь на это состояние в своей DOM, страница обязательно отразит это изменение. Вы пытались использовать console.log внутри своего редуктора или эффекта? 15.08.2017
  • да, он передает значение реквизиту. и я поместил регистратор в мой компонент, он не регистрировался после того, как редуктор уменьшил значение 15.08.2017
  • То есть вы имеете в виду, что значения обновляются в состоянии, но не отражаются в вашем компоненте? Можете ли вы также разместить код вашего компонента. 15.08.2017

Ответы:


1

Похоже, вы мутируете highestData вместо создания нового

Не уверен, какая у вас структура, но, по крайней мере, это нужно переписать.

for(var i = 0;i<highestData.channel_mix.length;i++){
       for(var j= 0;j<action.updateData.length;j++){
           if(highestData.mix[i].pk === action.updateData[j].pk){
               highestData.mix[i].volume = action.updateData[j].volume;
               break;
           }
       }
   }

к чему-то вроде этого

highestData = {
  ...highestData ,
  mix: highestDat.mix.map(channel => {
     const update = action.updateData.find(({pk}) => channel.pk === pk)
     if(update)
       return {...channel, volume: update.volume}
     return channel
  })
}
15.08.2017
  • что есть в action.updateData.some(({pk}) => channel.pk === pk) ? 15.08.2017
  • Опечатка. Я имею в виду find 15.08.2017
  • эй, это сработало. не могли бы вы объяснить, как неизменяемость влияет на рендеринг DOM 15.08.2017
  • Redux считает состояние неизменным. Если вы возвращаете тот же объект из редуктора, он предполагает, что ничего не изменилось. Следовательно, никаких обновлений для подписчиков (компонентов контейнера) и никаких обновлений для результирующего DOM (зачем беспокоиться, если состояние такое же, верно?) 15.08.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..