Javascript 使用同一容器反应/重排多个组件

Javascript 使用同一容器反应/重排多个组件,javascript,reactjs,ecmascript-6,redux,react-redux,Javascript,Reactjs,Ecmascript 6,Redux,React Redux,我对这项技术非常陌生,但我对一些事情感到困惑: 我有一个react容器,用于处理应用程序中应向用户显示的视图: const mapStateToProps = (state) => { return { currentScreen: state.currentScreen } } 并处理应用程序何时应更改当前屏幕: const mapDispatchToProps = (dispatch) => { return { changeScreen: (new

我对这项技术非常陌生,但我对一些事情感到困惑:

我有一个react容器,用于处理应用程序中应向用户显示的视图:

const mapStateToProps = (state) => {
  return {
    currentScreen: state.currentScreen
  }
}
并处理应用程序何时应更改当前屏幕:

const mapDispatchToProps = (dispatch) => {
  return {
    changeScreen: (newScreen) => {
      dispatch(changeScreen(newScreen))
    }
  }
}
但仅与应用程序组件连接:

import App from '../components/App'

const AppScreen = connect(
  mapStateToProps,
  mapDispatchToProps
)(App)
<List changeScreen={this.props.changeScreen} />

如何与所有组件共享changeScreen功能?

当您定义mapDispatchToProps时,您将返回一个对象,然后该对象将映射到App的道具。因此,在你的应用程序组件中,只需检查道具,并注意你的功能更改屏幕是存在的。这假设您已经定义了正在进行的引用


您可以在此处阅读有关connect函数工作原理的更多信息:

定义mapDispatchToProps时,您将返回一个对象,然后该对象将映射到App的道具。因此,在你的应用程序组件中,只需检查道具,并注意你的功能更改屏幕是存在的。这假设您已经定义了正在进行的引用


您可以在此处阅读有关连接功能如何工作的更多信息:

您可以在子组件的道具中传递连接的changeScreen功能,也可以在子组件中使用mapDispatchToProps

例如,如果应用程序具有列表子组件:

import App from '../components/App'

const AppScreen = connect(
  mapStateToProps,
  mapDispatchToProps
)(App)
<List changeScreen={this.props.changeScreen} />

您可以在子组件的道具中传递连接的changeScreen函数,也可以在子组件中使用mapDispatchToProps

例如,如果应用程序具有列表子组件:

import App from '../components/App'

const AppScreen = connect(
  mapStateToProps,
  mapDispatchToProps
)(App)
<List changeScreen={this.props.changeScreen} />

创建一个新文件actions.js,以便可以从任何地方调用此操作。 例如:

export function changeScreen(newScreen){
    return({
        your code here....
    });
}

现在,您可以在应用程序组件中或从任何其他组件中共享

import { changeScreen } from './actions';
import { bindActionCreators } from 'redux';
并使用bindActionCreators进行调度

function mapDispatchToProps(dispatch){
  return bindActionCreators({ changeScreen }, dispatch);
}

希望这有帮助

创建一个新文件actions.js,以便可以从任何地方调用此操作。 例如:

export function changeScreen(newScreen){
    return({
        your code here....
    });
}

现在,您可以在应用程序组件中或从任何其他组件中共享

import { changeScreen } from './actions';
import { bindActionCreators } from 'redux';
并使用bindActionCreators进行调度

function mapDispatchToProps(dispatch){
  return bindActionCreators({ changeScreen }, dispatch);
}
希望这有帮助

您可以使用上下文或依赖项注入使changeScreen全局运行。下面的示例使用上下文

如果您发现在需要changeScreen函数时向每个子组件添加contextTypes。您可以使用依赖注入模式。下面是一个

您可以使用上下文或依赖项注入使changeScreen全局运行。下面的示例使用上下文


如果您发现在需要changeScreen函数时向每个子组件添加contextTypes。您可以使用依赖注入模式。以下是您为什么不将connect的输出重新用于多个组件,例如:

服务/ChangeScreen.js

容器/Home.js

容器/Modal.js


为什么不将connect的输出重新用于多个组件,例如:

服务/ChangeScreen.js

容器/Home.js

容器/Modal.js


changeScreen函数已在App component中成功定义,我想知道的是如何在所有组件之间共享此函数,而无需为每个组件在不同容器中编写相同的代码changeScreen函数已在App component中成功定义,我想知道的是如何在所有组件之间共享这个函数,而不必为每个组件在不同的容器中编写相同的代码