当前位置: 首页 > 面试题库 >

如何在React中访问孩子的状态?

吴举
2023-03-14
问题内容

我有以下结构:

FormEditor-包含多个FieldEditor- FieldEditor编辑表单的字段并在其状态下保存有关该字段的各种值

在FormEditor中单击按钮时,我希望能够从所有FieldEditor组件中收集有关字段的信息,处于其状态的信息,并将其全部包含在FormEditor中。

我考虑过将有关字段信息的信息存储在FieldEditor的状态之外,FormEditor而是将其置于的状态。但是,这将需要FormEditorFieldEditor组件的每个组件发生更改时侦听它们并以其状态存储其信息。

我不能只访问儿童的州吗?理想吗?


问题答案:

如果您已经具有用于单个FieldEditor的onChange处理函数,那么我不明白为什么您不能只将状态移到FormEditor组件上,而仅将回调从那里传递给FieldEditor,以更新父状态。对我来说,这似乎是一种更React-
y的方式。

可能与此类似:

const FieldEditor = ({ value, onChange, id }) => {
  const handleChange = event => {
    const text = event.target.value;
    onChange(id, text);
  };

  return (
    <div className="field-editor">
      <input onChange={handleChange} value={value} />
    </div>
  );
};

const FormEditor = props => {
  const [values, setValues] = useState({});
  const handleFieldChange = (fieldId, value) => {
    setValues({ ...values, [fieldId]: value });
  };

  const fields = props.fields.map(field => (
    <FieldEditor
      key={field}
      id={field}
      onChange={handleFieldChange}
      value={values[field]}
    />
  ));

  return (
    <div>
      {fields}
      <pre>{JSON.stringify(values, null, 2)}</pre>
    </div>
  );
};

// To add abillity to dynamically add/remove fields keep the list in state
const App = () => {
  const fields = ["field1", "field2", "anotherField"];

  return <FormEditor fields={fields} />;
};

原始-钩前版本:

class FieldEditor extends React.Component {

  constructor(props) {

    super(props);

    this.handleChange = this.handleChange.bind(this);

  }



  handleChange(event) {

    const text = event.target.value;

    this.props.onChange(this.props.id, text);

  }



  render() {

    return (

      <div className="field-editor">

        <input onChange={this.handleChange} value={this.props.value} />

      </div>

    );

  }

}



class FormEditor extends React.Component {

  constructor(props) {

    super(props);

    this.state = {};



    this.handleFieldChange = this.handleFieldChange.bind(this);

  }



  handleFieldChange(fieldId, value) {

    this.setState({ [fieldId]: value });

  }



  render() {

    const fields = this.props.fields.map(field => (

      <FieldEditor

        key={field}

        id={field}

        onChange={this.handleFieldChange}

        value={this.state[field]}

      />

    ));



    return (

      <div>

        {fields}

        <div>{JSON.stringify(this.state)}</div>

      </div>

    );

  }

}



// Convert to class component and add ability to dynamically add/remove fields by having it in state

const App = () => {

  const fields = ["field1", "field2", "anotherField"];



  return <FormEditor fields={fields} />;

};



ReactDOM.render(<App />, document.body);


 类似资料:
  • 我有以下结构: -保存FieldEditor的多个实例-编辑表单的字段,并在其状态下保存有关该字段的各种值 当单击FormEditor中的按钮时,我希望能够从所有组件中收集有关字段的信息,处于其状态的信息,并将其全部包含在FormEditor中。 我考虑将有关字段的信息存储在的状态之外,并将其置于的状态。但是,这将需要在其组件更改并将其信息存储在其状态时侦听它们。 我不能直接进入儿童状态吗?理想吗

  • 问题内容: 我只是做一个简单的应用程序来学习与redux异步。我已经使所有工作正常进行,现在我只想在网页上显示实际状态。现在,我实际上如何在render方法中访问商店的状态? 这是我的代码(所有内容都在一页中,因为我只是在学习): 因此,在状态的render方法中,我想列出商店中的所有内容。 谢谢 问题答案: 您应该创建单独的组件,该组件将侦听状态更改并在每次状态更改时进行更新:

  • 我只是做了一个简单的应用程序学习异步与Redux。我已经使所有的工作,现在我只想显示的实际状态到网页上。现在,我如何在render方法中实际访问存储的状态? 这里是我的代码(所有内容都在一个页面中,因为我只是在学习): 谢谢

  • 我在react native中有一个搜索栏组件,它在父组件中导入, SearchBar子组件具有以下元素: 是否可以访问此子组件在其中导入的父组件中的状态?提前感谢你的帮助

  • 我还没有反应过来,现在我的状态中有了这些信息(如图所示),我如何才能访问消息:? 我尝试了和,但似乎两者都不对,有人能告诉我如何访问消息吗?非常感谢。 //////////////////////////////////////////// 嗨,克里斯,非常感谢你的回答。 您是对的,错误对象是从API返回的,我已经将其添加到状态。 我也试过 this.set状态({错误: errorObjFrom