javascript - 如何使用 Redux 存储中的数据渲染 React 组件

标签 javascript reactjs redux

我是 redux 的新手,我正在尝试在我的 React 应用程序中实现一个小概念。 我已收到来自调度的数据及其订阅。如何将订阅数据打印到 UI。下面的代码无法运行,错误在哪里以及如何解决。

import React, { Component } from 'react';
import { createStore } from 'redux';

export default class App1 extends Component {

  render() {

    const initalState={items:
                       [{
                             name:"test"
                       }]
                      };

    // Create Reducer, this is need state and action
    const reducer = function(state,action){
        if(action.type==='POST'){
            return action.payload;
        }
        return state;
    }

    // Create store, this is  need reducer and state
    const store=createStore(reducer,initalState);

    // Subscribe 
    store.subscribe(()=>{
        items: store.getState().items;
    });

    // Dispatch
    store.dispatch({
        type:"POST",
        payload:{
            items:
        [{
        name:"test 1"
    },
    {
        name:"test 2"
    }]
        }
    });

    return (
        <div>
             {this.props.items.map((item) => <p> {item.name} </p> )}
        </div>
    )

  }
}

最佳答案

我对你的代码做了一些更改并创建了一个 jsfiddle为了更好地理解。

简而言之,当您使用class时,您应该在componentDidMount或某些事件中调度操作,而不是render方法。其次,我使用 this.forceUpdate(); 在状态更改后重新渲染组件。

我认为你把基于类的组件基于函数的组件搞乱了。

这是完整的工作示例,工作 jsfiddle 是 here :

const initalState={
    items: [{
      name:"test"
    }]
};

// Create Reducer, this is need state and action
const reducer = function(state,action){
    if(action.type==='POST'){
        return action.payload;
    }
    return state;
}
// Create store, this is  need reducer and state
const store=Redux.createStore(reducer,initalState);

class App1 extends React.Component {

    componentDidMount () {
       // subscribe
        store.subscribe(()=>{
            this.forceUpdate(); // actually triggers component to rerender on subscribe. Note you can also use this.setState() to trigger changes
        });

      // Dispatch
        store.dispatch({
            type:"POST",
            payload: {
              items: [
                {
                  name:"test 1"
                }, 
                {
                    name:"test 2"
                }
            ]
        }
    });
  }

  render() {    
    return (
        store.getState().items.length > 0 &&
        <div>
             {store.getState().items.map((item) => <p> {item.name} </p> )}
        </div>
    )

  }
}

ReactDOM.render(
    <App1 />,
    document.getElementById('container')
);

关于javascript - 如何使用 Redux 存储中的数据渲染 React 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51136768/

相关文章:

javascript - Express.js 请求参数未定义

javascript - .js 和 .min.js 有什么区别?

javascript - 从用户服务中的 firestore 返回用户数据返回 null

javascript - 开 Jest 刚刚通过了所有测试,即使它是假的

javascript - 如何在 react 中返回html文本变量并打印为html?

javascript - 为什么它不能以这种方式显示用户点击显示在模态中的内容?

Redux + Normalizr 分离(删除)操作

javascript 预期表达式,得到关键字 'break'

javascript - 如何在redux操作中获取userid?

javascript - 映射对象数组并根据名字进行过滤