gpt4 book ai didi

javascript - mapStateToProps 不更新

转载 作者:搜寻专家 更新时间:2023-11-01 04:35:03 26 4
gpt4 key购买 nike

我刚开始玩 react/redux。我只想输入一些文本并点击提交,然后将其传递给另一个组件,该组件将显示输入的内容。

我知道我可以从 A 点到 B 点获取数据,因为如果我使用 store.subscribe,我就可以访问状态,而且它总是准确的。我正在尝试使用 mapStateToProps 但我没有任何运气。

我没有使用 mapDispatchToProps,所以这可能是个问题?我似乎找不到一个很好的简单例子。 mapStateToProps 似乎也只在我刷新页面时运行(使用 webpack-dev-server),因为它只在页面加载时记录一次,再也不会记录。

_______________ Input.js _________________

import React from 'react';
import store from '../redux/store';
import { connect } from 'react-redux';
import { addSearchParam } from '../redux/actions';

export default class Input extends React.Component {

constructor(props) {
super(props);
this.state = {
player: ''
};

this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}

handleChange(event) {
this.setState({
player: event.target.value
});
}

handleSubmit(event) {
event.preventDefault();
store.dispatch(addSearchParam(this.state.player))
}

render() {
return ( <form onSubmit = {this.handleSubmit} >
<label>
<input type="text" value={this.state.player}
onChange={this.handleChange}/>
</label>
<input type="submit" value="Submit" />
</form>
);
}
}


_______________ Info.js _________________


import React from 'react';
import store from '../redux/store';
import { connect } from 'react-redux';

class Info extends React.Component {

constructor(props) {
super(props);
}

render() {
return (
<h2> {this.props.player}</h2>
)
}
}

function mapStateToProps(state) {
console.log("mapStateToPropsInfo: ", state)
return {
player: state.player
}
}

export default connect(mapStateToProps, null)(Info);


_______________ reducers.js _________________

'use strict';

import {
combineReducers
} from 'redux';

const SEARCH_PARAM = 'SEARCH_PARAM';

const searchReducer = (state = '', action) => {
if (action.type === SEARCH_PARAM) {
return action.text;
}
return state;
}

export const reducers = combineReducers({
searchReducer
})

export default reducers;


_______________ actions.js _________________

'use-strict';

export const addSearchParam = input => {
return {
type: 'SEARCH_PARAM',
id: 'player',
text: input
}
}

_______________ index.js _________________
'use-strict';

import React from 'react';
import ReactDOM from 'react-dom';
import App from './js/App';
import { Provider } from 'react-redux';
import { createStore } from 'redux';
import reducers from './js/redux/reducers'

let store = createStore(reducers)

ReactDOM.render(
<Provider store={store}>
<App />
</Provider>, document.getElementById('root')
);

这些似乎是与此问题相关的最重要的文件,但如有必要,我可以提供更多。谢谢你的帮助。希望我只是遗漏了一些简单的东西。

最佳答案

我认为问题在于您已经编写了actions 但从未使用/连接过它。您需要Input.js 中使用mapDispatchToProps

首先像这样在 input.js 中导入 action:

import { addSearchParam } from './actions';

像这样编写 mapDispatchToProps 函数:

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

然后,在 Input.js 中的 handleSubmit 函数中执行此操作:

this.props.addSearchParam(this.state.player)                

此外,不是在清除时导出类,而是更改 Input.js 的导出语句以同时绑定(bind) mapDispatchToProps :

export default connect(null, mapDispatchToProps)(Input);       

关于javascript - mapStateToProps 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47544862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com