javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

reactjs-来自的Redux-Form初始值

我正在尝试用来自API的数据填写个人资料表单。 不幸的是,在这种情况下,redux-form不想与我合作。 由于某些原因,无论我做什么,字段都保持为空。

出于某些原因,设置固定值而不是从reducer传递的值效果很好。

也许是因为我在动作创建者内部对API调用使用了redux-promise? 我如何忍受它并摆脱它。 这是我的表单组件。

import React, { Component } from 'react';
import { reduxForm, Field } from 'redux-form';
import { connect } from 'react-redux';
import { fetchRoleList, fetchUserData } from '../actions';

class UserEdit extends Component {

    componentWillMount() {
        this.props.fetchRoleList();
        this.props.fetchUserData();
    }

    handleEditProfileFormSubmit(formProps) {
        console.log(formProps);
    }

    getRoleOptions(selected_id) {
        if (!this.props.profile) {
            return <option>No data</option>;
        }

        return this.props.profile.roles.map(role => {
            return <option key={role.role_id} value={role.role_id}>{role.name}</option>;
        });
    }

    renderField(props) {
        const { input, placeholder, label, value, type, meta: { touched, error } } = props;
        return (
        <fieldset className={`form-group ${ (touched && error) ? 'has-error' : '' }`}>
            <label>{label}</label>
            <input className="form-control" {...input} type={type} placeholder={placeholder} />
            {touched && error && <div className="error">{error}</div>}
        </fieldset>
        );
    }

    renderSelect({ input, placeholder, options, label, type, meta: { touched, error } }) {
        return (
        <fieldset className={`form-group ${ (touched && error) ? 'has-error' : '' }`}>
            <label>{label}</label>
            <select className="form-control" {...input}>
                {options}
            </select>
            {touched && error && <div className="error">{error}</div>}
        </fieldset>
        );
    }

    render() {
        const { handleSubmit } = this.props;

        const user = this.props.profile.user;

        return (
        <div> {user ? user.email : ''}
            <form onSubmit={handleSubmit(this.handleEditProfileFormSubmit.bind(this))}>
                <Field name="email" label="Email:" component={this.renderField} type="text" placeholder="email@gmail.com" className="form-control"/>
                <Field name="name" label="Name:"  component={this.renderField} type="text" placeholder="John Doe" className="form-control"/>
                <Field name="role" label="Role:" component={this.renderSelect} type="select" className="form-control" options={this.getRoleOptions()}/>
                <button action="submit" className="btn btn-primary">Edit user</button>

                <Field name="password" label="Password:" component={this.renderField} type="password" className="form-control"/>
                <Field name="passwordConfirm" label="Confirm Password:" component={this.renderField} type="password" className="form-control"/>
                { this.props.errorMessage
                &&  <div className="alert alert-danger">
                        <strong>Oops!</strong> {this.props.errorMessage}
                    </div> }
                <button action="submit" className="btn btn-primary">Sign up!</button>
            </form>
        </div>
        );
    }

}

let InitializeFromStateForm = reduxForm({
    form: 'initializeFromState'
})(UserEdit);

InitializeFromStateForm = connect(
  state => ({
    profile: state.profile,
    initialValues: state.profile.user
  }),
  { fetchRoleList, fetchUserData }
)(InitializeFromStateForm);

export default InitializeFromStateForm;

我相信动作创建者也将很有用:

export function fetchUserData(user_id) {
    user_id = user_id ? user_id : '';

    const authorization = localStorage.getItem('token');
    const request = axios.get(`${ROOT_URL}/user/${user_id}`, {
      headers: { authorization }
    });

    return {
        type: FETCH_USER,
        payload: request
    };
}
trans by 2020-08-11T10:17:41Z

javascript-如何使用Redux刷新JWT令牌?

我们的React Native Redux应用程序使用JWT令牌进行身份验证。 有许多动作需要这样的令牌,并且许多令牌是同时分发的,例如 应用加载时。

例如。

componentDidMount() {
    dispath(loadProfile());
    dispatch(loadAssets());
    ...
}

loadProfileloadAssets都需要JWT。 我们将令牌保存在状态AsyncStorage中。我的问题是如何处理令牌过期。

最初,我将使用中间件来处理令牌到期

// jwt-middleware.js

export function refreshJWTToken({ dispatch, getState }) {

  return (next) => (action) => {
    if (isExpired(getState().auth.token)) {
      return dispatch(refreshToken())
          .then(() => next(action))
          .catch(e => console.log('error refreshing token', e));
    }
    return next(action);
};

}

我遇到的问题是loadProfileloadAssets操作将同时刷新令牌,因为在分发它们时令牌将过期。 理想情况下,我想“暂停”需要身份验证的操作,直到刷新令牌为止。 有没有办法用中间件做到这一点?

trans by 2020-08-10T11:22:21Z

javascript-如何在React + Redux中优化对嵌套组件的prop的小更新?

示例代码:[https://github.com/d6u/example-redux-update-nested-props/blob/master/one-connect/index.js]

观看现场演示:[http://d6u.github.io/example-redux-update-nested-props/one-connect.html]

如何优化嵌套组件的prop的小更新?

我有上述组件,Repo和RepoList。 我想更新第一个仓库的标签(第14行)。 所以我派出了UPDATE_TAG动作。 在我实施connect之前,调度大约需要200毫秒,这是可以预期的,因为我们浪费了很多时间来更改mapStateToPropss,而这没有改变。

添加connect后,调度大约需要30毫秒。 在生产构建React.js之后,更新仅花费约17ms。 这样会好很多,但是Chrome开发者控制台中的时间轴视图仍指示帧框架(大于16.6毫秒)。

enter image description here

想象一下,如果我们有许多这样的更新,或者connect比当前更新更复杂,我们将无法维持60fps。

我的问题是,对于嵌套组件的props这样小的更新,是否有更有效和规范的方法来更新内容? 我还能使用Redux吗?

通过将每个connect替换为可观察的内部减速器,我得到了一个解决方案。 就像是

// inside reducer when handling UPDATE_TAG action
// repos[0].tags of state is already replaced with a Rx.BehaviorSubject
get('repos[0].tags', state).onNext([{
  id: 213,
  text: 'Node.js'
}]);

然后,我使用[https://github.com/jayphelps/react-observable-subscribe]在Repo组件内订阅了它们的值。 即使使用React.js进行开发,每次调度也仅花费5毫秒。 但是我觉得这是Redux中的反模式。

更新1

我按照Dan Abramov的回答中的建议进行了规范化,并更新了连接组件

新的状态形状为:

{
    repoIds: ['1', '2', '3', ...],
    reposById: {
        '1': {...},
        '2': {...}
    }
}

我在mapStateToProps周围添加了connect,以设置初始渲染的时间。

但是,性能比以前差(初始渲染和更新)。 (来源:[https://github.com/d6u/example-redux-update-nested-props/blob/master/repo-connect/index.js,]实时演示:[http://d6u.github.io /example-redux-update-nested-props/repo-connect.html)]

// With dev build
INITIAL: 520.208ms
DISPATCH: 40.782ms

// With prod build
INITIAL: 138.872ms
DISPATCH: 23.054ms

enter image description here

我认为每个connect上的connect都有很多开销。

更新2

根据Dan更新后的答案,我们必须返回connectmapStateToProps参数来返回函数。 您可以查看Dan的答案。 我还更新了演示。

下面,我的计算机上的性能要好得多。 只是为了好玩,我还在我所说的减速器方法中添加了副作用(来源,演示)(严重的是不使用它,仅用于实验)。

// in prod build (not average, very small sample)

// one connect at root
INITIAL: 83.789ms
DISPATCH: 17.332ms

// connect at every <Repo/>
INITIAL: 126.557ms
DISPATCH: 22.573ms

// connect at every <Repo/> with memorization
INITIAL: 125.115ms
DISPATCH: 9.784ms

// observables + side effect in reducers (don't use!)
INITIAL: 163.923ms
DISPATCH: 4.383ms

更新3

刚刚添加了基于“记忆中的联系”的虚拟化示例

INITIAL: 31.878ms
DISPATCH: 4.549ms
trans by 2020-08-06T19:14:40Z

javascript-使用Redux提取数据时如何避免竞争情况?

我们有一个动作可以异步获取对象,我们将其称为GET_POST_DETAILS,该操作采用了要获取的帖子的参数一个ID。 向用户显示一个帖子列表,可以单击其中的一个以获得一些详细信息。

如果用户单击“帖子#1”,我们将分派GET_POST_DETAILS操作,该操作可能类似于以下内容。

const getPostDetails = (id) => ({
  type: c.GET_POST_DETAILS,
  promise: (http) => http.get(`http://example.com/posts/#${id}`),
  returnKey: 'facebookData'
})

这是由中间件拾取的,该中间件将一个成功处理程序添加到Promise中,这将调用诸如GET_POST_DETAILS和反序列化的JSON对象。 减速器看到此对象并将其应用于商店。 典型的__OK减速器看起来像这样。

[c.GET_ALL__OK]: (state, response) => assign(state, {
  currentPost: response.postDetails
})

在此行的后面,我们有一个组件,外观为2987598556808348348672,并显示当前帖子的详细信息。

但是,我们有一个竞赛条件。 如果用户一个接一个地提交了两个GET_POST_DETAILS操作,则存在如果第二个http请求在第一个http请求之前完成,则不能保证我们以什么顺序接收2987598556808808348673操作状态将变得不正确。

    Action                   => Result
    ---------------------------------------------------------------------------------
|T| User Clicks Post #1      => GET_POST for #1 dispatched => Http Request #1 pending
|i| User Clicks Post #2      => GET_POST for #2 dispatched => Http Request #2 pending
|m| Http Request #2 Resolves => Results for #2 added to state
|e| Http Request #1 Resolves => Results for #1 added to state
 V

我们如何确保用户总是单击最后一个项目?

trans by 2020-07-29T08:47:58Z

javascript-如何构造Redux组件/容器

我正在使用redux,但不确定如何组织组件,我认为最好是将它们保存在文件夹中,并以主要组件的名称作为文件夹的名称以及内部的所有内部组件的名称:

components
  Common/   things like links, header titles, etc
  Form/     buttons, inputs, etc
  Player/   all small components forming the player
    index.js  this one is the top layout component
    playBtn.js
    artistName.js
    songName.js
  Episode/  another component

然后,在container文件夹中,我每页只有一个容器,这是我实际连接到Redux的唯一容器:

containers/
  HomePageApp.js
  EpisodePageApp.js
  ...

然后操作是每个顶部组件一个,而不是每个页面一个,因此在我连接到Redux的页面容器中,我传递了该页面中使用的组件的所有操作。 例如:

actions/
  Player.js
  Episode.js
  ...

我这样做对吗? 我没有找到关于它的更多信息,我发现我认为它们仅限于小型项目。

谢谢!

trans by 2020-07-28T22:15:47Z

reactjs-Redux中的选择器是什么?

我试图在getUser中遵循此代码

export const getUser = (state, login) => state.entities.users[login]
export const getRepo = (state, fullName) => state.entities.repos[fullName]

然后像这样在传奇中使用它:

import { getUser } from '../reducers/selectors'

// load user unless it is cached
function* loadUser(login, requiredFields) {
  const user = yield select(getUser, login)
  if (!user || requiredFields.some(key => !user.hasOwnProperty(key))) {
    yield call(fetchUser, login)
  }
}

这个getUser减速器(甚至是减速器)看起来与我通常期望的减速器看起来非常不同。

谁能解释选择器是什么,以及getUser是减速器,以及它如何与redux-saga配合使用?

trans by 2020-07-28T08:24:56Z

reactjs-Redux:如何进行后端持久化的意见/示例?

我想知道使用Redux的人们如何实现他们的后端持久性。 特别是,您是将“操作”存储在数据库中还是仅存储应用程序的最后已知状态?

如果要存储动作,是否只是从服务器请求动作,然后在加载给定页面时重播所有动作? 难道这不会导致大型应用程序在执行大量操作时出现一些性能问题吗?

如果仅存储“当前状态”,那么实际上如何在客户端上发生操作时的任何给定时间保持该状态?

有谁有一些代码示例说明如何将redux reducer连接到后端存储api?

我知道这是一个非常“取决于您的应用程序”类型的问题,但是我只是在这里思考一些想法,并试图了解这种“无状态”架构如何在整个堆栈上起作用。

感谢大家。

trans by 2020-07-26T16:59:55Z

reactjs-反应:为什么使用静态propTypes

我正在寻找redux todomvc代码。 static propTypes中的static关键字是什么?谢谢

更新

不知道为什么要投票? 这篇文章太简单了吗? 欢迎发表评论。 谢谢。 希望我可以删除这篇文章。

trans by 2020-07-18T10:39:15Z

javascript-将callBacks传递给redux异步操作是否被视为一种好习惯?

我想为成功/错误响应显示不同的通知栏,我将两个callBacks传递给我的react组件中的redux异步操作,如下所示:

<Button
  onClick={e => this.props.actions.asyncAction(item, this.showSuccessBar, this.showErrorBar)}
/>

其中asyncAction看起来像这样:

export function asyncAction(item, successCallback, errorCallback) {
  return (dispatch, getState) => {
    dispatch(requestItem(item));
    return fetch("api.some_url/items/item")
      .then(response => response.json())
      .then(json => {
        if (json.success) {
          dispatch(receivePostsSuccess(reddit, json));
          successCallback();
        } else {
          dispatch(receivePostsFail(reddit, json));
          errorCallback();
        }
      });
    }
  };
}

是否认为这与模式相反?换句话说,通知栏是否应根据状态更改而不是根据回调打开?

trans by 2020-07-17T20:00:34Z

javascript-如何处理Redux中的复杂副作用?

我一直在努力寻找解决这个问题的方法...

我正在开发带有在线记分板的游戏。 播放器可以随时登录和注销。 完成游戏后,玩家将看到计分板并看到自己的排名,并且分数将自动提交。

计分板显示玩家的排名和排行榜。

Screenshot

当用户完成播放(提交分数)时以及仅想查看其排名时都使用记分板。

这是逻辑变得非常复杂的地方:

  • 如果用户已登录,则分数将首先提交。 保存新记录后,计分板将被加载。

  • 否则,计分板将立即加载。 玩家可以选择登录或注册。 之后,分数将被提交,然后记分板将再次刷新。

  • 但是,如果没有分数要提交(只需查看高分表)。 在这种情况下,只需下载玩家的现有记录。 但是,由于此操作不会影响计分板,因此应同时下载计分板和玩家的记录。

  • 有无数个级别。 每个级别都有一个不同的计分板。 当用户查看计分板时,则用户正在“观察”该计分板。 当它关闭时,用户停止观察它。

  • 用户可以随时登录和注销。 如果用户注销,则用户排名将消失,如果用户以其他帐户登录,则应获取并显示该帐户的排名信息。

    ...但是此信息的获取仅应针对用户当前正在观察的记分板进行。

  • 对于查看操作,结果应缓存在内存中,这样,如果用户重新订阅同一计分板,则不会进行提取。 但是,如果正在提交分数,则不应使用缓存。

  • 这些网络操作均可能失败,并且播放器必须能够重试它们。

  • 这些操作应该是原子的。 所有状态应一口气更新(无中间状态)。

目前,我能够使用Bacon.js(功能性反应式编程库)解决此问题,因为它附带了原子更新支持。 该代码非常简洁,但是现在它是一个混乱且无法预测的意大利面条代码。

我开始看Redux。 因此,我尝试构建商店,并提出了类似以下内容(使用YAMLish语法):

user: (user information)
record:
  level1:
    status: (loading / completed / error)
    data:   (record data)
    error:  (error / null)
scoreboard:
  level1:
    status: (loading / completed / error)
    data:
      - (record data)
      - (record data)
      - (record data)
    error:  (error / null)

问题就变成了:我把副作用放在哪里。

对于无副作用的动作,这变得非常容易。 例如,在SET_USER动作上,record减速器可以简单地清除所有记录。

但是,某些操作确实有副作用。 例如,如果我在提交分数之前未登录,那么我登录成功,则SET_USER操作会将用户保存到商店中。

但是由于要提交分数,因此此SET_USER操作还必须导致触发AJAX请求,同时将record设置为loading

问题是:当我以原子方式登录时,如何表示应该发生副作用(分数提交)?

在Elm架构中,使用SET_USER的形式时,更新程序也会产生副作用,但是在Redux中,仅为record

从“异步操作”文档中,他们推荐的方法是将它们放入操作创建者中。 这是否意味着为了成功完成登录操作,提交分数的逻辑也必须放在操作创建者中?

function login (options) {
  return (dispatch) => {
    service.login(options).then(user => dispatch(setUser(user)))
  }
}

function setUser (user) {
  return (dispatch, getState) => {
    dispatch({ type: 'SET_USER', user })
    let scoreboards = getObservedScoreboards(getState())
    for (let scoreboard of scoreboards) {
      service.loadUserRanking(scoreboard.level)
    }
  }
}

我觉得这有点奇怪,因为负责此连锁反应的代码现在存在于2个地方:

  1. 在减速器中。 派遣SET_USER操作时,record减速器还必须将属于观察到的记分板的记录的状态设置为loading
  2. 在动作创建者中,执行获取/提交分数的实际副作用。

看来我还必须手动跟踪所有活动的观察者。 而在Bacon.js版本中,我做了这样的事情:

Bacon.once() // When first observing the scoreboard
.merge(resubmit口) // When resubmitting because of network error
.merge(user川.changes().filter(user => !!user).first()) // When user logs in (but only once)
.flatMapLatest(submitOrGetRanking(data))

由于上述所有复杂规则,实际的培根代码要长得多,这使得培根版本几乎不可读。

但是,培根会自动跟踪所有活动的订阅。 这使我开始质疑它是否值得进行转换,因为将其重写为Redux将需要大量的人工处理。 谁能建议一些指针?

trans by 2020-07-09T21:33:46Z

javascript-如何将方法放到Redux状态的对象上?

根据文档,反应应用程序的状态必须是可序列化的。那班呢?

假设我有一个ToDo应用。到目前为止,每个.rename()项目都具有would be instanceTodo.rename()等属性。现在,我想对不可序列化的对象使用方法。 即 Task.rename(),它将重命名为todo并执行许多其他操作。

据我了解,我可以在某处声明函数,然后执行2946489656315216816896或通过道具would be instance将该函数传递给组件。

我在某处声明.rename()有2个问题:1)在哪里? 在减速器中? 很难在应用程序周围的化简器中找到所有would be instance方法。2)传递此功能。 真? 我应该通过所有更高级别的组件手动传递它吗而且,每当我有更多方法时,都会添加一吨样板以将其传递下去?或者总是这样做,并希望我对一种类型的对象只有一种重命名方法。 不是Todo.rename() Task.rename()Event.rename()

这对我来说似乎很愚蠢。 对象应该知道可以做什么以及用什么方式。 是不是?

我在这里想念的是什么?

trans by 2020-07-01T00:09:57Z

javascript-如何在react-router中为Link或IndexLink的包装元素设置activeClassName?

我是ReactJS世界的新手,并且想知道如何将活动的类名传递给<li>元素而不是<a>(Link)元素。

现在,我有这种代码。 单击时,锚类会更改。

<li><IndexLink to='/' activeclassName='active'>A</IndexLink></li>
<li><Link to='/b' activeclassName='active'>B</Link></li>
<li><Link to='/c' activeclassName='active'>C</Link></li>

但我想得到类似的东西:

<li activeclassName='active'><IndexLink to='/'>A</IndexLink></li>
<li activeclassName='active'><Link to='/b'>B</Link></li>
<li activeclassName='active'><Link to='/c'>C</Link></li>

提前致谢

trans by 2020-06-26T23:41:25Z

reactjs-如何对React-Redux连接的组件进行单元测试?

我正在使用Mocha,Chai,Karma,Sinn,Webpack进行单元测试。

我按照此链接为React-Redux Code配置了我的测试环境。

如何在React with Karma,Babel和Webpack上实现测试+代码覆盖率

我可以成功地测试动作和reducers的javascript代码,但是在测试我的组件时,它总是会抛出一些错误。

import React from 'react';
import TestUtils from 'react/lib/ReactTestUtils'; //I like using the Test Utils, but you can just use the DOM API instead.
import chai from 'chai';
// import sinon from 'sinon';
import spies from 'chai-spies';

chai.use(spies);

let should = chai.should()
  , expect = chai.expect;

import { PhoneVerification } from '../PhoneVerification';

let fakeStore = {
      'isFetching': false,
      'usernameSettings': {
        'errors': {},
        'username': 'sahil',
        'isEditable': false
      },
      'emailSettings': {
        'email': 'test@test.com',
        'isEmailVerified': false,
        'isEditable': false
      },
      'passwordSettings': {
        'errors': {},
        'password': 'showsomestarz',
        'isEditable': false
      },
      'phoneSettings': {
        'isEditable': false,
        'errors': {},
        'otp': null,
        'isOTPSent': false,
        'isOTPReSent': false,
        'isShowMissedCallNumber': false,
        'isShowMissedCallVerificationLink': false,
        'missedCallNumber': null,
        'timeLeftToVerify': null,
        '_verifiedNumber': null,
        'timers': [],
        'phone': '',
        'isPhoneVerified': false
      }
}

function setup () {
    console.log(PhoneVerification);
    // PhoneVerification.componentDidMount = chai.spy();
    let output = TestUtils.renderIntoDocument(<PhoneVerification {...fakeStore}/>);
    return {
        output
    }
}

describe('PhoneVerificationComponent', () => {
    it('should render properly', (done) => {
        const { output } = setup();
        expect(PhoneVerification.prototype.componentDidMount).to.have.been.called;
        done();
    })
});

上面的代码出现了以下错误。

FAILED TESTS:
  PhoneVerificationComponent
    ✖ should render properly
      Chrome 48.0.2564 (Mac OS X 10.11.3)
    Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined.

尝试从正宗间谍转换为亲密间谍。

我应该如何对我的React-Redux Connected Components(Smart Components)进行单元测试?

trans by 2020-06-21T06:52:58Z

响应本机-订阅Redux存储中的单个属性更改

在Redux中,我可以轻松地订阅存储更改

store.subscribe(() => my handler goes here)

但是,如果我的商店到处都是不同的对象,并且在我应用程序的特定位置,我想订阅仅在商店中特定对象上进行的更改,该怎么办?

trans by 2020-06-19T08:16:55Z

javascript-我在哪里可以从React Redux应用程序的服务器中获取初始数据?

我已经开始学习React / Redux,偶然发现了可能是一个非常基本的问题。 以下是我的应用程序中的代码段,为简单起见删除了一些代码。

我的状态由一系列网站描述,默认情况下为空。 当用户分页到其他页面时,以后的reducer将具有LOAD_SITES的操作来加载不同的站点集,但现在它什么也不做。 React首先渲染PublishedSitesBox,然后渲染componentDidMount,然后循环遍历数据并渲染各个站点。

我想做的是让它使用默认的空数组呈现所有内容,同时启动“从服务器加载站点”承诺,一旦解决,就调度LOAD_SITES操作。 拨打电话的最佳方法是什么? 我在考虑PublishedSitesBox的构造函数或componentDidMount的构造函数。但是不确定这是否可行-我担心的是,我将以这种方式创建一个无限循环,以保持重新渲染。 我想我可以通过沿“ haveRequestedInitialData”行设置一些其他状态参数来防止这种无限循环。 我的另一个想法是在完成2926885254453553527555之后立即做出这个承诺。什么是最好,最干净的方法?

export default function sites(state = [], action) {
  switch (action.type) {
    default:
      return state;
  }
}
...

const publishedSitesPageReducer = combineReducers({
  sites
});

ReactDOM.render(
  <Provider store={createStore(publishedSitesPageReducer)}>
    <PublishedSitesPage />
  </Provider>,
  this.$view.find('.js-published-sites-result-target')[0]
);

...

export default function PublishedSitesPage() {
  return (
    <PublishedSitesBox/>
  );
}

...

function mapStateToProps(state) {
  return { sites: state.sites };
}

const PublishedSitesBox = connect(mapStateToProps)(({sites}) => {
  // render sites
});
trans by 2020-06-17T11:34:31Z

javascript-更新redux中的嵌套数据

使用Redux更新商店中嵌套数据数组的最佳/正确方法是什么?

我的商店看起来像这样:

{
    items:{
        1: {
            id: 1,
            key: "value",
            links: [
                {
                    id: 10001
                    data: "some more stuff"
                },
                ...
            ]
        },
        ...
    }
}

我有一对异步操作来更新完整的items对象,但是我还有另一对操作要更新特定的links数组。

我的减速器当前看起来像这样,但是我不确定这是否是正确的方法:

  switch (action.type) {
    case RESOURCE_TYPE_LINK_ADD_SUCCESS:
      // TODO: check whether the following is acceptable or should we create a new one?
      state.items[action.resourceTypeId].isSourceOf.push(action.resourceTypeLink);
      return Object.assign({}, state, {
        items: state.items,
      });
  }
trans by 2020-02-29T15:12:13Z

javascript-如何获取新数据以响应Redux对React Router的更改?

我正在使用Redux,redux-router和reactjs。

我正在尝试制作一个用于获取路线更改信息的应用程序,因此,我会遇到以下问题:

<Route path="/" component={App}>
    <Route path="artist" component={ArtistApp} />
    <Route path="artist/:artistId" component={ArtistApp} />
</Route>

当有人输入artist/<artistId>时,我想搜索艺术家,然后呈现信息。 问题是,这样做的最佳方法是什么?

我已经找到了一些答案,可以使用RxJS或尝试使用中间件来管理请求。 现在,我的问题是,这真的必要吗?还是保持体系结构不可知的一种方法? 我可以直接从react componentDidMount()和componentDidUpdate()获取我需要的信息吗? 现在,我通过在那些请求信息的功能中触发一个动作来执行此操作,并且当信息到达时组件会重新渲染。 该组件具有一些让我知道的属性:

{
    isFetching: true,
    entity : {}
}

谢谢!

trans by 2020-02-22T18:24:57Z

reactjs-React-Redux:合并化简器:意外的键

在开始组合Redux减速器之前,我的应用程序运行良好。 但是当我合并时,initialState和reducer键混合在一起了。

function flash(state = [], action) {
  switch (action.type) {
  case FLASH_MESSAGE_UPDATED:
    return _.extend({}, state, { flash: action.flash })
  default:
    return state
  }
}

function events(state = [], action) {
  switch (action.type) {
  case EVENTS_UPDATED:
    return _.extend({}, state, { events: action.pathway_events })
  default:
    return state
  }
}

export default combineReducers({
  events,
  flash
})

这会导致功能中断和控制台错误:

Unexpected keys "one", "two" found in initialState argument passed to createStore. Expected to find one of the known reducer keys instead: "events", "flash". Unexpected keys will be ignored.

我的初始状态是通过redux-thunk传递的。

import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import reducer from '../../reducers/event'

let initialState = {
  one: globalData.one,
  two: globalData.two,
  events: globalData.events,
  flash: globalData.flash
}
let createStoreWithMiddleware = applyMiddleware(thunk)(createStore)
let reduxStore = createStoreWithMiddleware(reducer, initialState);

React.render(
  <Provider store={reduxStore}>
    <EventListContainer />
  </Provider>,
  $('.events')[0]
)

如何正确组合减速器?

trans by 2020-02-18T17:21:27Z

javascript-redux,react-redux,redux-thunk有什么区别?

我正在使用React + Flux。 我们的团队计划从助焊剂转变为还原剂。 Redux对来自助焊剂世界的我非常困惑。 在磁通控制中,从组件->操作->存储和存储更新返回组件很简单。 它简单而非常清楚。

但是在redux中令人困惑。 这里没有商店,是的,有些例子没有使用商店。 我经历了一些教程,似乎每个人都有自己的实现风格。 有些正在使用容器,有些则没有。 (我不知道这个Containers概念,也无法理解mapStateToProps,mapDispatchToProps的作用)。

  1. 有人可以清楚地说明redux中的控制流如何发生吗?
  2. redux中的组件/容器/动作/动作创建者/商店的作用是什么?
  3. redux / react-redux / redux-thunk /其他之间的区别??
  4. 如果您可以发布任何简单而精确的redux教程的链接,这将非常有帮助。
trans by 2020-02-11T04:33:49Z

reactjs-在操作redux后反应路由器重定向

我正在使用react-redux和标准react-routing。 确定动作后,我需要重定向。

例如:我已经注册了几个步骤。 并采取以下措施:

function registerStep1Success(object) {
    return {
        type: REGISTER_STEP1_SUCCESS,
        status: object.status
   };
}

我希望他重定向到带有registrationStep2的页面。 怎么做?

ps。 在历史记录浏览器中,从未使用过“ / registrationStep2”。 仅在成功注册结果步骤1页面之后,才会显示此页面。

trans by 2020-02-08T08:49:39Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 下一页 共17页