reactjs - 将多个输入 onChange react 为单个数组

标签 reactjs

我有一个状态,它是组件 A 中的一个数组。然后我有一个组件 B(其 props 是组件 A 的状态),其中根据 A 的状态生成许多输入(类型文本)。说 3 ,然后我有 3 个输入类型文本,它们被包装在不同的组件和 div 中。我想知道我是否可以通过 onChange 获取所有三个值并将其添加到组件 A 中的数组中?顺序并不重要。也许有类似获取此 div 容器的子级,然后将其所有值 onChange 映射到数组并设置状态之类的操作?类似这样的事情

编辑:

所以我写了这个,我可以看到名称是正确的,但我收到此错误:“警告:出于性能原因重用此合成事件。如果您看到此内容,则您正在访问已发布的属性目标.. . 巴拉巴拉”。为什么我感觉我的setState不纯粹。好的,我要休息了……

  onMultipleChange(e) {
        console.log(e.target.name);
        this.setState((prevState, props) => {
            let publicKeys = {...prevState.publicKeys, [e.target.name]: e.target.value};
            return {...prevState, publicKeys}
        }, console.log(this.state));
    }

像这样动态设置引用:

refSetter = (ix) => (ref) => { this._refs[ix] = ref; };

最佳答案

警告:这是一种非常幼稚的方法,显然感觉很老套,但仍然有效,而且是合法的。我确信有一种更好的方法,不依赖 refs

示例:https://codesandbox.io/s/002o3275jl

组件A

class ComponentA extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      vals: []
    }
    this._refs = {};
  }

  onChange = () => {
    this.setState({
      vals: Object
        .keys(this._refs)
        .map(key => 
          this._refs[key] && 
          this._refs[key].value
        )
     });
  }

  render() {
    return (
      <div>
        All Vals: {this.state.vals.join(', ')}
        <ComponentB _ref={ref => this._refs['b'] = ref} onChange={this.onChange} />
        <ComponentC _ref={ref => this._refs['c'] = ref} onChange={this.onChange} />
        <ComponentD _ref={ref => this._refs['d'] = ref} onChange={this.onChange} />
      </div>
    )
  }
}

子组件

const ComponentB = ({_ref, onChange}) => (
  <input ref={_ref} onChange={onChange} type="text" />
);

const ComponentC = ({ _ref,  onChange }) => (
  <input ref={_ref} onChange={onChange} type="text" />
);

const ComponentD = ({ _ref,  onChange }) => (
  <input ref={_ref} onChange={onChange} type="text" />
);

关于reactjs - 将多个输入 onChange react 为单个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50401924/

相关文章:

reactjs - React 前端和 REST API、CSRF

javascript - 在 ReactJS 中检索返回的 POST 数据

reactjs - 如何使用 React 在音频元素上设置 srcObject

javascript - 在 map 内调用 this.props

javascript - 如何在 React 测试用例中使用 document.getElementById() (JEST+ ENZYME)

javascript - 函数组件不支持contextType

javascript - ReactJS material-ui TextField 应用css

reactjs - 获取MenuItem Material ui的值

javascript - 如何防止重复投票react-firebase

reactjs - 如何有条件地渲染使用钩子(Hook)的 React 组件