【问题标题】:Dynamic header child component in react/redux applicationreact/redux 应用程序中的动态标题子组件
【发布时间】:2017-02-06 10:30:25
【问题描述】:

我正在构建一个响应应用程序,其中标头根据路由更改,但也取决于其他组件的状态。

我正在寻找一种方法来控制子组件的标题。

例如,我希望当我单击主页中的按钮时,标题会附加新组件。

有没有办法实现这一点,同时避免在标题中使用多个 if 语句?

【问题讨论】:

标签: javascript reactjs redux react-router react-redux


【解决方案1】:

在您的状态中有一个变量,其中包含要附加到标题的内容。当状态发生变化时,React 负责重新加载所有组件。

前 - App.jsx

import React, { Component } from 'react';
import { connect } from 'react-redux';
import { Link } from 'react-router';
import { appendHeaderDemo } from 'redux/demo.js'

class ChildComponent1 extends Component {
  render() {
    return <h3>Child component 1 added to header</h3>
  }
};

class ChildComponent2 extends Component {
  render() {
    return <h3>Child component 2 added to header</h3>
  }
};

class App extends Component {
  render() {
    const { dispatch } = this.props

    return (
      <div className='container'>
        <h1> This is my header {this.props.appendToHeader} </h1>

        { this.props.appendToHeader == 'Button clicked' &&
          <ChildComponent1 />
        }

        { this.props.appendToHeader == 'Some Other State' &&
          <ChildComponent2 />
        }

        <button type="button" onClick={ () => onButtonClick() }> Change Header Content </button>

        <div className='container'>
          {this.props.children}
        </div>
      </div>
    );
  };
}

function mapStateToProps(state) {
  const { appendToHeader } = state

  return {
    appendToHeader
  }
}

export default connect(mapStateToProps, { onButtonClick: appendHeaderDemo })(App)

redux/demo.js-

export const CHANGE_HEADER_CONTENT = 'CHANGE_HEADER_CONTENT'

const initialState = {
  appendToHeader: ''
};

// Reducer
export default function appendHeader(state = initialState, action) {
  switch (action.type) {
    case CHANGE_HEADER_CONTENT:
      return Object.assign({}, state, {
        appendToHeader: 'Button clicked'
      })
    default:
      return state
  }
}

// Actions
export function appendHeaderDemo() {
  return {
    type: CHANGE_HEADER_CONTENT
  }
}

调度函数appendHeaderDemo可以从任何child调用,相应的变化会反映在header中(如果状态属性appendToHeader有变化)

【讨论】:

  • 感谢您的回答,我实际上是在寻找将 component 附加到由containers 子组件触发的操作的标题中。你觉得我怎么能做到这一点?
  • 检查最后一次编辑。我添加了 2 个根据状态显示的子组件。我不知道你是否可以避免多个 if 条件。我希望这就是你要找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 2016-10-25
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
相关资源
最近更新 更多