ReactJS.NET - 如何在一个组件中更新另一个组件中的道具?

时间:2015-11-20 09:31:39

标签: c# asp.net reactjs reactjs.net

我一直在搜索一整天,以便通过从我的产品列表中选择它来更新我的ShoppingCart(this.props.shoppingCart)一个新项目(this.props.products)..

我找到了一种方法,但它似乎非常麻烦和复杂,这就像使用Dispatchers一样:

如果我没错,这还需要npm-package flex,而node.js?这并不理想,因为我使用的是Visual Studio和ReactJS.NET ..

那么......如何在地球上我能以简单易懂的方式做到这一点吗?

Global Dispatcher:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/tools">

    <item
        android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:orderInCategory="100"
        app:showAsAction="always"/>

    <item
        android:id="@+id/imgAdd"
        android:title="@string/CreatePost"
        android:orderInCategory="200"
        android:icon="@android:drawable/ic_menu_add"
        app:showAsAction="always"></item>

    <item
        android:id="@+id/menu_search"
        android:title="menu_search"
        android:orderInCategory="300"
        appcompat:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always"/>

</menu>

用法:

var ShoppingCartStore = {
shoppingCart: [],
dispatcher: new Dispatcher(),

addToCart: function (item) {

    this.shoppingCart.push(item);

    this.dispatcher.dispatch({
        actionType: 'updated',
        data: this.shoppingCart
    });
}, 
};

如何更新?

addToCart: function (e) {
    var shoppingCartItem = {
        name: this.props.productData.name,
        price: this.props.productData.price,
        description: this.props.productData.description
    };

    ShoppingCartStore.dispatcher.subscribe(function () {

    });

    ShoppingCartStore.addToCart(shoppingCartItem);
},

1 个答案:

答案 0 :(得分:2)

听起来您正在尝试实施Flux

假设您不想使用Flux:

string fetchQuery = @"--my fetchXML here...--";
FetchExpression fetchTestParameters = new FetchExpression(fetchQuery);
EntityCollection testParameters = context.RetrieveMultiple(fetchTestParameters);

foreach (var testParameter in testParameters.Entities)
{
    switch (testParameter.cs_testcalculation["name"])
    {
      case "Addition":
        //do something...
      case "Subtraction":
        //do something else...
      ...
    }
}

请记住继续把事情当成道具。将状态保持在组件层次结构中尽可能高,并尽可能少地使用它。如果这些组件无法由单个有状态组件包装,则可能需要找到不同的解决方案。

抱歉,我不懂.NET,所以这是JS,但概念仍然适用!