Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用React Redux时从输入字段更新状态_Javascript_Reactjs_Redux_React Redux - Fatal编程技术网

Javascript 使用React Redux时从输入字段更新状态

Javascript 使用React Redux时从输入字段更新状态,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我目前正在使用React Redux,但它是一个非常简单的应用程序。 该应用程序只需获取用户ID、密码和用户想要进入的服务器地址。它进入服务器并在服务器中运行脚本。但在我的问题中,应用程序的功能并不重要 我只需要3个状态(用户名、密码和服务器地址)的应用程序 然而,我有三个不同的还原器和操作,它们在不同的状态下做相同的事情 比如说, userReducer.js // reducer functions takes a default state and an action to apply

我目前正在使用React Redux,但它是一个非常简单的应用程序。 该应用程序只需获取用户ID、密码和用户想要进入的服务器地址。它进入服务器并在服务器中运行脚本。但在我的问题中,应用程序的功能并不重要

我只需要3个状态(用户名、密码和服务器地址)的应用程序

然而,我有三个不同的还原器和操作,它们在不同的状态下做相同的事情

比如说,

userReducer.js

// reducer functions takes a default state and an action to apply

import { UPDATE_PASSWORD } from '../actions/passwordActions'

export default function passwordReducer(state = '', { type, payload }) {
    switch (type) {
        case UPDATE_PASSWORD:
            return payload;
        default:
            return state;
    }
}
export const onInputChange = event => ({
  type: 'UPDATE_INPUT',
  payload: event
});
const INITIAL_STATE = {
  user: '',
  password: ''
}

export const inputReducer = (state = INITIAL_STATE, action) => {
  switch (action.type) {
    case: 'UPDATE_INPUT':
      return { ...state, [action.payload.target.name]: action.payload.target.value };
    default:
      return state;
  };
};
//reducer函数采用默认状态和要应用的操作

import { UPDATE_USER } from '../actions/userActions'

export default function userReducer(state = '', { type, payload }) {
    switch (type) {
        case UPDATE_USER:
            return payload;
        default:
            return state;
    }
}
import { UPDATE_ROUTER } from '../actions/routerActions'

export default function routerReducer(state = '', { type, payload }) {
    switch (type) {
        case UPDATE_ROUTER:
            return payload;
        default:
            return state;
    }
}
passwordReducer.js

// reducer functions takes a default state and an action to apply

import { UPDATE_PASSWORD } from '../actions/passwordActions'

export default function passwordReducer(state = '', { type, payload }) {
    switch (type) {
        case UPDATE_PASSWORD:
            return payload;
        default:
            return state;
    }
}
export const onInputChange = event => ({
  type: 'UPDATE_INPUT',
  payload: event
});
const INITIAL_STATE = {
  user: '',
  password: ''
}

export const inputReducer = (state = INITIAL_STATE, action) => {
  switch (action.type) {
    case: 'UPDATE_INPUT':
      return { ...state, [action.payload.target.name]: action.payload.target.value };
    default:
      return state;
  };
};
routerReducer.js//这是服务器

//reducer函数采用默认状态和要应用的操作

import { UPDATE_USER } from '../actions/userActions'

export default function userReducer(state = '', { type, payload }) {
    switch (type) {
        case UPDATE_USER:
            return payload;
        default:
            return state;
    }
}
import { UPDATE_ROUTER } from '../actions/routerActions'

export default function routerReducer(state = '', { type, payload }) {
    switch (type) {
        case UPDATE_ROUTER:
            return payload;
        default:
            return state;
    }
}
以及如下所示的操作:

export const UPDATE_PASSWORD = 'updatePassword'

export function updatePassword(newPassword) {
    return {
        type: UPDATE_PASSWORD,
        payload: {
            'newPassword': newPassword
        }
    }
}
onUpdateUser = (e) => {
  this.props.onUpdateUser({
    key: 'name',
    value: e.target.value
  })
}

onUpdatePassword = (e) => {
  this.props.onUpdateUser({
    key: 'password',
    value: e.target.value
  })
}
对于另外两个变量不同的情况也是一样的

然后在我的组件中,我刚刚将
mapActionsToProps
连接到该组件,并放置了3个执行相同操作的函数(更新状态)

像这样使用它

这有点有效,但我不确定这是否是使用React Redux的正确方法。首先,它们是重复的,似乎不是一个好的做法。然而,我想不出一种方法来更新每一个状态,而不使用类似的代码


有什么帮助吗?

您可以将事件传递给您的action.js

// reducer functions takes a default state and an action to apply

import { UPDATE_PASSWORD } from '../actions/passwordActions'

export default function passwordReducer(state = '', { type, payload }) {
    switch (type) {
        case UPDATE_PASSWORD:
            return payload;
        default:
            return state;
    }
}
export const onInputChange = event => ({
  type: 'UPDATE_INPUT',
  payload: event
});
const INITIAL_STATE = {
  user: '',
  password: ''
}

export const inputReducer = (state = INITIAL_STATE, action) => {
  switch (action.type) {
    case: 'UPDATE_INPUT':
      return { ...state, [action.payload.target.name]: action.payload.target.value };
    default:
      return state;
  };
};
只需在reducer.js中获取事件的名称和值即可

// reducer functions takes a default state and an action to apply

import { UPDATE_PASSWORD } from '../actions/passwordActions'

export default function passwordReducer(state = '', { type, payload }) {
    switch (type) {
        case UPDATE_PASSWORD:
            return payload;
        default:
            return state;
    }
}
export const onInputChange = event => ({
  type: 'UPDATE_INPUT',
  payload: event
});
const INITIAL_STATE = {
  user: '',
  password: ''
}

export const inputReducer = (state = INITIAL_STATE, action) => {
  switch (action.type) {
    case: 'UPDATE_INPUT':
      return { ...state, [action.payload.target.name]: action.payload.target.value };
    default:
      return state;
  };
};
然后在组件中

// ...
handleChange(event) {
  this.props.onInputChange(event);
};

// ...
<input type='text' name='user' onChange={this.handleChange} />
/。。。
手变(活动){
此.props.onInputChange(事件);
};
// ...

您可以使用单个函数发送要更新的键/值对

export const UPDATE_USER_VALUE = 'updateUserValues'

export function updateUser(payload) {
    return {
        type: UPDATE_USER_VALUE,
        payload: payload,
    }
}
必须按如下方式调用该函数:

export const UPDATE_PASSWORD = 'updatePassword'

export function updatePassword(newPassword) {
    return {
        type: UPDATE_PASSWORD,
        payload: {
            'newPassword': newPassword
        }
    }
}
onUpdateUser = (e) => {
  this.props.onUpdateUser({
    key: 'name',
    value: e.target.value
  })
}

onUpdatePassword = (e) => {
  this.props.onUpdateUser({
    key: 'password',
    value: e.target.value
  })
}
然后只需更新这些值

import { UPDATE_USER_VALUE } from '../actions/userActions'

const defaultState = {
  username = '',
  password = '',
  server_address = ''
};

export default function passwordReducer(state = defaultState, { type, payload }) {
    switch (type) {
        case UPDATE_USER_VALUE:
            return {
               ...state,
               state[payload.key]: payload.value
            };
        default:
            return state;
    }
}

在Reducer中创建状态并存储和返回有效负载对象,而不是直接返回Reducer中的有效负载对象。