标签: flux

使用Flux体系结构中的内部事件创建可重用的React.js组件

我正在遵循以下视频中的"容器和组件"方法,以在Flux架构中构建可重用的组件.

React.js Conf 2015(22m 50s):https://youtu.be/KYzlpRvWZ6c?t = 22m50s


例如,我正在使用"下一步"按钮构建图像滑块.

ImageSliderContainer

  • ImageSliderStore和保持状态(例如,CURRENTINDEX)
  • 用道具渲染ImageSlider

ImageSlider

  • 无状态组件,仅基于道具进行渲染
  • 有一个子组件NextButton

Next按钮

  • 无状态组件,仅基于道具进行渲染
  • 有onClick事件

在Flux架构中,单击NextButton将向商店发送操作.然后,商店将更新"currentIndex"并发出更改事件.在我看来,ImageSlider不再可重复使用,因为它与单个商店紧密耦合,通过该商店将通知单个容器.

另一种选择是将状态"currentIndex"添加到ImageSlider组件.单击NextButton将通知ImageSlider更新其状态.但这会引入从NextButtonImageSlider的反向数据流(违反Flux架构?).此外,它违反了"容器和组件"方法,其中组件只使用props呈现UI.

在Flux架构中制作可重用组件的最佳方法是什么?更具体地说,哪个元素(存储,容器,组件或其他东西)应该处理NextButton组件中发生的onClick事件?


编辑

根据答案,这里有一个满足Flux架构和"容器和组件"模式的解决方案.

  • 容器拥有状态"currentIndex".该应用程序可能有多个容器,如ScreenshotSliderContainerDebugSliderContainer,每个容器都维护自己的"currentIndex".
  • 容器将onClick处理程序作为prop 传递给组件ImageSlider.onClick处理程序将一个动作发送到商店.
  • ImageSlider组件是无状态的的onClick处理程序转移到子组件Next按钮.
  • 因此,NextButton中的onClick事件不会影响顶级组件ImageSlider.只有容器使用新的道具呈现ImageSlider.

flux reactjs reactjs-flux

3
推荐指数
1
解决办法
1366
查看次数

Spring-mvc与reactjs集成?

我正在尝试集成spring-mvc和reactjs,但这是一个太糟糕的例子,但我喜欢reactjs的flux架构师,所以我非常想将reactjs与springmvc集成!我想使用reactjs作为客户端,springmvc作为休息后端.你能给我一些例子或教程吗?我在谷歌上搜索过,但结果非常糟糕.请帮我.非常感谢你

spring spring-mvc flux reactjs

3
推荐指数
1
解决办法
1万
查看次数

反应Js - 流量中的状态管理

我们正在使用FLUX架构在React JS中开发时间跟踪客户端,并且想知道整个应用程序状态应该在单个状态对象中.

  • 这样父组件可以在发生更改时获取状态,并通过props将其传递给子组件

要么

  • 每个组件都应该有自己的状态对象,因此当从商店触发状态更改时,它们可以单独请求其状态和setState.

javascript flux reactjs reactjs-flux

3
推荐指数
1
解决办法
826
查看次数

Reactjs中componentDidMount和getInitialState之间的区别

我知道getInitialState在组件的生命周期中被调用一次,并且在呈现组件时会调用componentDidMount.

那么这是否意味着它们将在组件的生命周期中被调用一次?有什么不同?

facebook flux reactjs

3
推荐指数
1
解决办法
9198
查看次数

在React组件和服务之间进行通信的最佳实践是什么?

除了使用flux / redux体系结构,React组件应如何与服务进行通信?

例如: 有一个容器,只有很少的代表性(反应)组件:

  1. ChatBox-启用读/写消息
  2. 带有密码更改器的AvatarBox-可以更改用户密码
  3. 新闻流-列出新闻并对其应用过滤器

将它们视为资源表示形式,我希望它们中的每一个都可以自己访问Microservice API(获取或更新数据)。它是否正确?它将提供干净的责任管理模型,但是使用http请求加载每个组件的内容会给性能带来疑问

这个问题还涉及:如何为多个(微)服务执行有效的通信?

rest flux reactjs microservices redux

3
推荐指数
1
解决办法
7950
查看次数

在Redux中使用Spread运算符或Object.assign有什么用?

我是否有点混淆是否在reducer函数中使用Spread运算符或Object.assign来将更改应用于目标对象.

const toggleTodo = (todo) => {
  return Object.assign({}, todo, {
    completed: !todo.completed
   });
 };
Run Code Online (Sandbox Code Playgroud)

然后上面提到的代码使用的是Object.assign方法,下面的代码是使用spread运算符

const toggleTodo = (todo) => {
return {
  ...todo,
  completed: !todo.completed
  };
};
Run Code Online (Sandbox Code Playgroud)

这两者中哪种方法是合适的

flux reactjs react-native redux react-redux

3
推荐指数
1
解决办法
296
查看次数

将Redux Action传递给带有props的子组件

我想在用户点击某个项目时将我的应用中的视频设置为"精选".我有一个动作创建者在调用时执行一个简单的console.log(),并且为了测试我调用它w/componentDidMount(),它工作正常.我有一个单独的VideoItem组件,我试图传递动作创建者,但我得到一个错误:TypeError: Cannot read property 'props' of undefined.我试图添加.bind(this)到我传递的动作的结尾,但它没有任何区别.

如果动作创建者在我调用时工作componentDidMount,为什么我不能将它传递给子组件?这是我的Video和VideoItem组件:

// Video.js


import React, { Component } from 'react'
import VideoItem from './VideoItem'
class Videos extends Component {
  componentDidMount() {
      this.props.actions.getVideos()
      // This function works, but getting error
      // when passing to VideoItem component
      this.props.actions.setFeaturedVideo()
  }
  constructor(props) {
      super(props);
  }
  render() {
    if(this.props.videos.length == 0){
      return <p>Loading....</p>
    }
    return (
        <div className="container">
          <ul className="row">
              {this.props.videos.map(function(result) {
                return (
                    <VideoItem
                    key={result.position}
                    setFeaturedVideo={this.props.setFeaturedVideo}
                    video={result}

                    />
                ) …
Run Code Online (Sandbox Code Playgroud)

javascript flux reactjs reactjs-flux redux

3
推荐指数
1
解决办法
2749
查看次数

在redux中没有使用reactjs定义调度

我想知道为什么点击表格行仍然会给我未定义的调度错误导致Uncaught TypeError: dispatch is not a function.我一直在关注这篇文章,试图解决问题,但到目前为止还没有成功.

ListingTable.js

import Table from 'grommet/components/Table';
import React from 'react';
import {remove, add} from '../action/ListAction';
import {connect} from 'react-redux'

let createHandlers = function(dispatch) {
    let onClick = function(item) {
        dispatch(add(item)) <<== undefined!!!!
    };
    return {
        onClick
    };
};
export class ListingTable extends React.Component {

    constructor(props) {
        super(props);
        this.handlers = createHandlers(this.props.dispatch);
    }
    render() {
        return <Table>
                <tbody>
                {
                    this.props.data.map((item, key)=>
                        (
                            // Undefined Error!!!!
                            <tr onClick={()=> this.handlers.onClick(item)} key={key}>

                                <td>{item.user_name}</td>
                                <td>{item.name}</td>
                                <td>{item.url}</td> …
Run Code Online (Sandbox Code Playgroud)

javascript flux ecmascript-6 reactjs redux

3
推荐指数
1
解决办法
8040
查看次数

这个ES6语法是什么?函数调用后冒号

我正在查看React中助焊剂商店的文档.他们给出了以下例子.

import {ReduceStore} from 'flux/utils';

class CounterStore extends ReduceStore<number> {
  getInitialState(): number {
    return 0;
  }

  reduce(state: number, action: Object): number {
    switch (action.type) {
      case 'increment':
        return state + 1;

      case 'square':
        return state * state;

      default:
        return state;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

请参阅getInitialState():number {},这似乎不遵循任何以前的javascript语法约定.如何使用ES5语法编写这个?

javascript flux ecmascript-6 reactjs

3
推荐指数
2
解决办法
3540
查看次数

Redux:Reducer需要其他Reducer的状态吗?

说我有两个减速器.

减速机No.1:当前选择项目减速机

state = {currentlySelectedItemId: 123}
Run Code Online (Sandbox Code Playgroud)

减速机2号:All-Items-Reducer

state = [{ id: 123, name: "John"}, {id: 231, name: "Jill"}, {id: 411, name: "Alf"}]
Run Code Online (Sandbox Code Playgroud)

我有一个简单的React应用程序和一个React组件只显示当前选定的项目.即,基于其中的id currently-selected-item-reducer,它找到要显示的正确项目all-items reducer.

问题:

说当前选择的项目是123,我想去实现一个按钮,它始终是数组中的下一个项目.现在我需要找到123该项all-items-reducer,在该数组中获取其索引,然后递增它.然后我的React组件将完成剩下的工作.

然而,这意味着我需要访问的数组all-items-reducer在我的current-item reducer.这怎么可能?或者我在这里误解了什么?

PS:我宁愿不在我的程序中引入一个计数器currently-selected-item-reducer,因为这将是多余的信息:理论上,我应该能够通过查看all-items-reducer array和执行findIndex()或类似的东西找到当前选择的项目位置.

javascript flux reactjs redux react-redux

3
推荐指数
1
解决办法
329
查看次数