React + Reflux:将变量传递到数据存储

威尔·阿什

我正在构建一个React + Reflux应用程序,除其他外,该应用程序允许创建/删除/编辑类别。到目前为止,我已经能够显示所有类别并通过关联的存储和动作处理React组件中类别的创建/删除。这一切都很好,可以更新数据库并按预期重新提供组件。我的重点是尝试向下钻取特定的现有类别以进行编辑时。

我需要以某种方式将类别ID传递给商店,然后再通过ajax调用将其传递给php / sql查询,以便获取/设置特定于该特定类别的数据。如果我完全绕过商店并将ajax调用放在组件本身内,那么我可以通过React-router的url参数使它工作(当然不会自动重新渲染),但我无法弄清楚如何通过商店来做到这一点。

换句话说,这或多或少起作用:

  • “ ManageCategories” React组件,使用CategoryStore列出所有类别,每个类别都包裹在一个锚标签中,该锚标签将类别ID传递给“ ManageCategory”路由/组件
  • “ ManageCategory”组件直接在其getInitialState方法内的ajax调用中使用类别ID参数来显示特定于类别的数据

但是,我认为以下是执行此操作的更正确的Reflux方式,但是我不确定如何使它工作:

  • 与上面相同的“ ManageCategories”组件
  • “ ManageCategory”组件以某种方式将其类别ID参数传递给CategoryStore(或者可能是其他“ IndividualCategoryStore”?),该组件仅返回特定于该类别的数据并处理对该类别的更新/编辑

通过将新方法(“ getCategoryData”)添加到CategoryStore中,我能够获得这种工作的笨拙版本,该方法在“ ManageCategory”组件的getInitialState方法中调用并传递了categoryId参数。这将刷新所有类别(来自CategoryStore的getDefaultData),然后显示正确的单个类别列表(来自组件的getInitialState)。

我对React + Reflux背后的概念感到相当满意,但在这一点上,我认为我可能误解了一些基本知识。在这个特定问题上工作了一个多星期,但我发现的所有示例/教程/文档都没有解决将变量传递到数据存储的特​​定问题。

动作:

var Actions = Reflux.createActions([
"createCategory",
"deleteCategory",
"editCategory"
]);

类别商店:

var CategoryStore = Reflux.createStore({
listenables: [Actions],
onCreateCategory: function(catName) {
    // ajax call to create new category that calls updateCategories on success
},
onDeleteCategory: function(catId) {
    // ajax call to delete category that calls updateCategories on success
},
updateCategories: function(){
    $.ajax({
        url: url + '?action=getAllCategories',
        async: false,
        dataType: 'json',
        success: function(categoryData) {
            this.categories = categoryData;
        }.bind(this),
        error: function(xhr, status, err) {
            console.error(url, status, err.toString());
        }.bind(this)
    });
    this.trigger(this.categories);
},
getDefaultData: function() {
    $.ajax({
        url: url + '?action=getAllCategories',
        async: false,
        dataType: 'json',
        success: function(categoryData) {
            this.categories = categoryData;
        }.bind(this),
        error: function(xhr, status, err) {
            console.error(url, status, err.toString());
        }.bind(this)
    });
    return this.categories;
}
});

类别组件:

var Category = React.createClass({
handleDeleteCategory: function() {
    Actions.deleteCategory(this.props.id);
},
render: function() {
    return (
        <li className="category">
            <IconButton icon="action-highlight-remove" onClick={this.handleDeleteCategory} />
            <h5><a href={"/#/manage-category/" + this.props.id}>{this.props.name} ({this.props.id})</a></h5>
        </li>
    );
}
});

ManageCategories组件:

var ManageCategories = React.createClass({
mixins: [
    Reflux.connect(CategoryStore, "categories")
],
getInitialState: function() {
    return {
        categories: []
    };
},
handleCreateCategory: function() {
    // category creation code
},
render: function() {
    var categoryNodes = this.state.categories.map(function(category) {
        return (
            <Category name={category.name} id={category.id} />
        )
    });
    return (
        <div className="dev-tools-container">
            <h1>Developer Tools</h1>
            <div className="categories">
                <h3>Categories</h3>
                <ul>
                    {categoryNodes}
                </ul>
                <h4>Create New Category:</h4>
                <form>
                    <label htmlFor="new-category-name">Category Name</label> <input type="text" id="new-category-name" /><br />
                    <PaperButton label="Create" primary={true} onClick={this.handleCreateCategory} />
                </form>
            </div>
        </div>
    );
}
});

预先感谢您的任何见解或帮助。

威尔·阿什

在最终将我的问题发表在这里之后,我想我可能已经弄清楚了我一直误入歧途。我在考虑将类别ID传递给商店以过滤其中的数据时,我真正需要做的就是从商店中获取全部数据并在组件中有选择地使用它。

因此,一旦使用catId作为url参数传递到了ManageCategory组件,我要做的就是基于catId过滤数据。

例如,一旦进入ManageCategory组件,我就可以使用lodash过滤并提取当前类别的名称值,如下所示。完全不需要编辑存储在CategoryStore中的数据集合。

var ManageCategory = React.createClass({
mixins: [
    Reflux.connect(CategoryStore, "categoryData")
],
getInitialState: function() {
    return {
        categoryData: []
    };
},
render: function() {
    var categoryName = _.chain(this.state.categoryData)
                        .filter({"id": this.props.params.catid})
                        .pluck("name");

    return (
        <div className="category-container">
            <h1>{categoryName}</h1>
        </div>
    );
}
});

随时让我知道是否有更好的方法可以执行此操作,但是现在这正是我所需要的。希望所有这些都可以对其他人有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将数据从 DB 传递到 React 组件

来自分类Dev

可以将大变量传递到React状态吗?

来自分类Dev

将变量从react-router传递到子组件

来自分类Dev

将数据从回调传递到React组件?

来自分类Dev

将数据传递到React Native中的组件?

来自分类Dev

将数据从React传递到节点服务器

来自分类Dev

使用React钩子将数据传递到同级组件?

来自分类Dev

使用kefirjs将数据传递到React组件

来自分类Dev

React - 将数据从外部 API 传递到 CSV 文件

来自分类Dev

将变量传递给React useCallback挂钩

来自分类Dev

React:将状态存储到模板文字

来自分类Dev

将react道具传递到组件并显示

来自分类Dev

React Router导致Reflux存储中的AJAX调用失败

来自分类Dev

React|Rest API:将表单数据存储到 REST API 上的对象中

来自分类Dev

是否有正确的方法将数据从HTML页面传递到React组件?

来自分类Dev

React Router-将api数据传递到链接的组件以打开新页面

来自分类Dev

如何使用ES6将流星订阅数据传递到React Component Props

来自分类Dev

React Native:将数据源从_renderRow中的Props传递到方法

来自分类Dev

React Native:将useState()数据传递到不相关的屏幕

来自分类Dev

React Material-Table onSelectionChange将数据传递到挂钩状态

来自分类Dev

无法将数据从嵌套文件上传React组件传递到父组件

来自分类Dev

使用React Hooks将数据从Child传递到其他Child

来自分类Dev

将JSON数据传递到react native(hook)中的下一页

来自分类Dev

React-router:通过路由将数据传递到组件

来自分类Dev

如何使用ES6将流星订阅数据传递到React Component Props

来自分类Dev

React Native - 将数据从一个组件传递到另一个

来自分类Dev

将变量传递到存储过程

来自分类Dev

React.js Chrome扩展-如何将Background.js中的数据存储在React中的变量中?

来自分类Dev

将数据集传递到存储过程

Related 相关文章

  1. 1

    将数据从 DB 传递到 React 组件

  2. 2

    可以将大变量传递到React状态吗?

  3. 3

    将变量从react-router传递到子组件

  4. 4

    将数据从回调传递到React组件?

  5. 5

    将数据传递到React Native中的组件?

  6. 6

    将数据从React传递到节点服务器

  7. 7

    使用React钩子将数据传递到同级组件?

  8. 8

    使用kefirjs将数据传递到React组件

  9. 9

    React - 将数据从外部 API 传递到 CSV 文件

  10. 10

    将变量传递给React useCallback挂钩

  11. 11

    React:将状态存储到模板文字

  12. 12

    将react道具传递到组件并显示

  13. 13

    React Router导致Reflux存储中的AJAX调用失败

  14. 14

    React|Rest API:将表单数据存储到 REST API 上的对象中

  15. 15

    是否有正确的方法将数据从HTML页面传递到React组件?

  16. 16

    React Router-将api数据传递到链接的组件以打开新页面

  17. 17

    如何使用ES6将流星订阅数据传递到React Component Props

  18. 18

    React Native:将数据源从_renderRow中的Props传递到方法

  19. 19

    React Native:将useState()数据传递到不相关的屏幕

  20. 20

    React Material-Table onSelectionChange将数据传递到挂钩状态

  21. 21

    无法将数据从嵌套文件上传React组件传递到父组件

  22. 22

    使用React Hooks将数据从Child传递到其他Child

  23. 23

    将JSON数据传递到react native(hook)中的下一页

  24. 24

    React-router:通过路由将数据传递到组件

  25. 25

    如何使用ES6将流星订阅数据传递到React Component Props

  26. 26

    React Native - 将数据从一个组件传递到另一个

  27. 27

    将变量传递到存储过程

  28. 28

    React.js Chrome扩展-如何将Background.js中的数据存储在React中的变量中?

  29. 29

    将数据集传递到存储过程

热门标签

归档