reactjs - 将文本值传递给另一个组件
问题描述
如何在 React 中使用 Redux 将文本值传递给另一个组件?
我正在 React 中学习 Redux。我正在尝试使用 React 中的 Redux 将文本值传递给另一个组件。
我的代码如下
我的组件.js
import React, { Component } from 'react';
import { connect } from 'react-redux';
class Mycomponent extends Component {
state = {
textInput: '',
}
handleChange = event => {
this.props.dispatch({ type: "add" });
}
render = () => {
return (
<div>
<input
type="text"
onChange={this.handleChange} />
</div>
);
}
}
const mapStateToProps = state => ({ nameState: state.nameState});
export default connect(mapStateToProps)(Mycomponent);
nameAction.js
export const nameAction = () => ({
type: 'add'
});
export default { nameAction };
nameReducer.js
const nameReducer = (state = {}, action) => {
switch (action.type) {
case 'add': {
return {
...state,
nameState: action.payload
};
}
default:
return state;
}
};
export default nameReducer;
输出组件.js
import React, { Component } from 'react';
class Outputcomponent extends Component {
render = (props) => {
return (
<div>
<div>{this.props.nameState }</div>
</div>
);
}
}
export default Outputcomponent;
解决方案
Josiah 解释的使用 redux 钩子对我来说是最好的方法,但您也可以使用 mapDispatchToProps。
即使主要问题是您没有在“添加”操作中传递任何数据。
nameAction.js
您在nameReducer.js中调用 action.payload但它没有出现在您的操作中
export const nameAction = (text) => ({
type: 'add',
payload: text
});
我的组件.js
那么对于你的状态,我们可以 mapDispatchToProps。
(我认为最好使用提交按钮触发操作并将输入更改保存在您的 textInput 状态,但我想这是故意没有的)
import React, { Component } from 'react';
import { connect } from 'react-redux';
import {nameAction} from './nameAction'
class Mycomponent extends Component {
state = {
textInput: '',
}
handleChange = event => {
this.props.nameAction(event.target.value);
}
render = () => {
return (
<div>
<input
type="text"
onChange={this.handleChange} />
</div>
);
}
}
const mapStateToProps = state => ({ nameState: state.nameState});
const mapDispatchToProps = dispatch => ({ nameAction: (text) => dispatch(nameAction(text))});
export default connect(mapStateToProps,mapDispatchToProps)(Mycomponent);
输出组件.js
使用 connect 和 mapStateToProps 的类或使用带有功能组件的 useSelector 挂钩来获取数据的两种可能性。
有一个班级
import React, { Component } from "react";
import { connect } from "react-redux";
class OutputComponent extends Component {
render = () => {
return (
<div>
<div>{this.props.nameState}</div>
</div>
);
};
}
const mapStateToProps = state => state;
export default connect(mapStateToProps)(OutputComponent);
带有功能组件
import React from "react";
import { useSelector } from "react-redux";
const OutputComponent = () => {
const nameState = useSelector((state) => state.nameState);
return (
<div>
<div>{nameState}</div>
</div>
);
};
export default OutputComponent;
当然你不能忘记创建一个 strore 并将它提供给最高的组件
store.js
import { createStore } from "redux";
import nameReducer from "./nameReducer";
const store = createStore(nameReducer);
export default store;
index.js
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import { Provider } from "react-redux";
import store from "./store";
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById("root")
);
推荐阅读
- html - 滑块没有响应并在其下方的部分中创建额外的高度
- python - Python-Selenium 爬虫冻结,尤其是在无头模式下(不可重现的错误)
- java - 如何修复:我的 Web 应用程序强制所有用户与同一个列表“交互”,而不是为每个用户提供自己的列表
- node.js - 通过 http put 请求访问对象中的数据
- c# - 无法从“字符串”转换为“对象”
- amazon-web-services - 当我们从 s3 触发 lambda 函数时。如何获取是否触发了 lambda 的日志。我想用 terraform 做到这一点
- javascript - 从 node_modules 中构建依赖包
- highcharts - 如何在实心仪表图上绘制绘图线
- firebase - 如何链接 Firestore 集合以模拟 SQL 连接或 WHERE IN
- python - 类子集的 COCO api 评估