javascript - 如何更换 child 的 Prop ?

标签 javascript reactjs

我是 React 的新手。这可能是一个菜鸟问题。

我想在用户单击复选框时更改我的 MeteorGriddle 组件的“filteredFields” Prop 。我的 JSX:

const bookingsPage = () => {
    let filteredFields = ['userName'];
    const handleClick = (e) => {
        if (e.target.checked) {
            filteredFields = ['userEmail'];

            // How to propagate this change to the MeteorGriddle?
        }
    }

    return (
        <div>
            <label><input type="checkbox" defaultChecked="true" value="userEmail" onClick={handleClick}/>Email</label>

            <MeteorGriddle filteredFields={filteredFields}/>
        </div>
    );
};

最佳答案

我看到有两种方法可以解决您的问题。

第一个也是最简单的方法:

将您的 bookingsPage 组件变成有状态组件而不是功能组件, 然后您就可以在其中创建状态,然后更改事件状态并将其传递给 MeteorGriddle 组件。

所以代码是:

class bookingsPage extends React.Component {
    getInitialState = () => {
      filteredFields: []
    }

    handleClick = (e) => {
        if (e.target.checked) {
            const newFilteredFields = 
              [ ...this.state.filteredFields ].push('userEmail');
            this.setState({ filteredFields: newFilteredFields });
        }
    }

    render() {
    return (
        <div>
            <label>
              <input
                type="checkbox" 
                defaultChecked="true" 
                value="userEmail" 
                onClick={this.handleClick}
              />
              Email
            </label>

            <MeteorGriddle 
              filteredFields={this.state.filteredFields}
            />
        </div>
    );
  }
};

第二种更难的方法:

看看Redux .它解决了 React 中的数据流问题。 基本概念是,当您选中复选框时,您将一个 Action 发送到 reducer(也就是 react 组件的全局数据存储),然后 GriddleComponent 收到应用程序的新状态,其中包含新数据,告诉他复选框已选中。

如果你想让我根据你的例子为你写一个例子。

关于javascript - 如何更换 child 的 Prop ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39149747/

相关文章:

javascript - 如何获取当前点击链接的父链接?

javascript - 将事件从 jQuery 插件转发到 React 组件?

javascript - 不会删除 react 中的正确项目

javascript - Jquery自动完成从第一个字符开始

javascript - Angular 发布到 nodejs

javascript - 获取内容可编辑div中的当前div id(特定)

javascript - React 中的列表查询

javascript - React 下拉问题 - 如何立即停止动态创建的下拉列表的所有更新

reactjs - 在 ReactJS 项目中自动导入所有 *.scss

JavaScript、正则表达式 : How to fetch mail address in mailto: links