javascript - 使用 React-Redux 时更新输入字段的状态

标签 javascript reactjs redux react-redux

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

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

但是,我有三个不同的 reducer 和操作,它们只是在不同的状态下执行相同的操作。

例如,

userReducer.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;
    }
}

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;
    }
}

routerReducer.js//这是服务器

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

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
        }
    }
}

其他两个变量相同,但变量不同。

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

class Container extends React.Component {
    constructor(props) {
        super(props)
    }
    onUpdateUser = (e) => {
        this.props.onUpdateUser(e.target.value)
    }

    onUpdatePassword = (e) => {
        this.props.onUpdatePassword(e.target.value)
    }

    onUpdateRouter = (e) => {
        this.props.onUpdateRouter(e.target.value)
    }
    ...

像这样使用它

这有点管用,但我不确定这是否是使用 React-Redux 的正确方法。首先,它们是重复的,看起来不是一个好的做法。但是,我想不出一种方法可以在不添加类似代码的情况下以 React-Redux 方式更新每个状态。

有什么帮助吗?

最佳答案

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

export const onInputChange = event => ({
  type: 'UPDATE_INPUT',
  payload: event
});

只需在 reducer.js 中获取事件的名称和值

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} />

关于javascript - 使用 React-Redux 时更新输入字段的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57156135/

相关文章:

javascript - Moment.js - 如何从日期和时间字符串构建时刻?

javascript - 如何将 [] 设置为数据属性并使用 javascript/jquery 获取它?

javascript - 使用 React 更新 HTML5 视频的源 URL

javascript - 在 React 中渲染 array.map() 时出错

reactjs - Redux - 获取数据,但在另一个组件中呈现

javascript - 如何像 jsfiddle.net 那样调整多个相邻文本区域的大小?

JavaScript 我必须单击两次才能选择元素

javascript - setQueryData 不使用 React-Query 更新缓存

javascript - 如何修复错误: Could not find router reducer in state tree,它必须安装在 "router"下

javascript - Redux + React-Router 不渲染