gpt4 book ai didi

javascript - 是什么阻止我的 redux 操作正常工作?

转载 作者:行者123 更新时间:2023-12-01 00:22:24 26 4
gpt4 key购买 nike

我是 React 的初学者,所以请耐心等待。几个小时以来我一直在努力解决这个问题,只是不明白我做错了什么。

一切正常,只需查找并加载 0 个错误。但是,当我尝试发起一项行动时,绝对没有任何反应。我正在记录状态,并且在应用程序首次启动后没有额外的日志。

所以我想要构建的是 super 简单的练习应用程序。它在屏幕上只有一个单词,每个字母都是其自身的一个组成部分。用户可以单击两个按钮中的任何一个,在单词的开头或结尾添加一个字母。就是这样。我仅有的两个操作是添加这些字母。

这是我的主要 App.js:

import React from 'react';
import Header from './Header';
import Adder from './Adder';
import CurrentWord from './CurrentWord';
import { connect } from 'react-redux';
import { addLetterStart, addLetterEnd } from '../actions';

class App extends React.Component {

render() {
console.log(this.props.word);
return (
<div>
<Header />
<div style={{ margin: "100px", display: "flex", justifyContent: "center"}}>
<Adder onClick={()=> this.props.addLetterStart()} />
<CurrentWord />
<Adder onClick={()=> this.props.addLetterEnd()} />
</div>
</div>
)
}
};

const mapStateToProps = (state) => {
return {
word: state.word
}
};

export default connect(mapStateToProps, {addLetterStart, addLetterEnd})(App);

这是我的 CurrentWord 组件:

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


class CurrentWord extends React.Component {
renderLetters() {
return this.props.word.map(letter => {
return <SingleLetter key={Math.floor(Math.random() * 100)} letter={letter} />
});

}

render() {
return (
<div style={{ display: "flex" }}>
{this.renderLetters()}
</div>
)
}
};

const mapStateToProps = (state) => {
return { word: state.word }
};

export default connect(mapStateToProps)(CurrentWord);

这些是我的操作 (actions/index.js)

import {ADD_END, ADD_START} from './types';


export const addLetterStart = () => {
return {
type: ADD_START
};
};

export const addLetterEnd = () => {
return {
type: ADD_END
};
};

我的 LettersReducer:

import { ADD_END, ADD_START } from '../actions/types';

export default (state = ['X', 'X', 'X', 'X'], action) => {
switch (action.type) {
case ADD_START:
return ['X', ...state];

case ADD_END:
return [...state, 'X'];

default:
return state;
}
};

我的 reducer /index.js:

import { combineReducers } from 'redux';
import LettersReducer from './LettersReducer';

export default combineReducers({
word: LettersReducer
});

还有我的主index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { createStore } from 'redux';

import App from './components/App';
import reducers from './reducers';

const store = createStore(reducers);

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

这是我的加法器组件:

import React from 'react';

const Adder = () => {

return (
<div className="ui card" style={{
height: "150px",
width: "150px",
display: "flex",
justifyContent: "center",
alignItems: "center",
cursor:"pointer",
margin: "10px"
}}>
<p style={{
fontSize: "80px",
color: "#ececec" }}>+</p>
</div>
)

};

export default Adder;

我认为这应该是所有相关的内容。我将不胜感激任何帮助,谢谢!

最佳答案

问题是您在组件 Adder 上添加了 onClick,但 Adder 不是 DOM 元素。您需要将该 Prop 转发到可点击的内容

从“react”导入React;

const Adder = ({ onClick }) => {

return (
<div className="ui card" style={{
height: "150px",
width: "150px",
display: "flex",
justifyContent: "center",
alignItems: "center",
cursor:"pointer",
margin: "10px"
}}>
<a onClick={onClick}><p c={style={{
fontSize: "80px",
color: "#ececec" }}>+</p></a>
</div>
)

};

export default Adder;

如果我没记错的话,你无法点击p标签,所以你可能需要用a anchor 或按钮包裹它。否则,您可以直接在 p

上执行此操作

关于javascript - 是什么阻止我的 redux 操作正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59305375/

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