سلام. یه چیزی که خیلی داره واسم مشکل ایجاد میکنه اینه که هنوز نتونستم راهی پیدا کنم که توی یه کامپوننت از کامپوننتی که با ری اکت ریداکس ساختم چندین بار استفاده کنم. اول کار reusable کامپوننتمو فقط با ری اکت نوشته بودم و توی یه صفحه چندین بار ازش استفاده میکردم و مشکلی هم نبود ولی الان که با ریداکس اون رو پیاده سازیش کردم اگر مقدار یکی از کامپوننت ها رو تغییر بدی همه تغییر میکنن. این کار خوبه تا زمانی که نخوای توی همون کامپوننت از Reusable کامپوننت استفاده کنی.. ولی اگر بخوای این مشکل پیش میاد. ممنون میشم کمک کنید که چه کاری باید انجام بدم
@hesammousavi
@kamran.davar
@sinashahoveisi
من از hooks استفاده کردم. ولی در اصل سوال هیچ فرقی نمیکنه که از کدوم استفاده کنیم. شما مثلا یه چک باکس رو توی یه کامپوننت ایجاد میکنی و اسم ایونت چک یا un check کردن اون رو میزاری checkValue و اون رو توی استور ذخیره میکنی و هر بار اون تغییر کرد استور آپدیت میشه.
حالا همین کامپوننت رو توی یه صفحه میخوام چند بار استفاده کنم. با چک کردن یکی از چک باکسا همه چک شده میشن. راه حل میخوام که متمایزشون کنم از هم . طبیعی هست این مشکل چون همشون دارن checkValue رو توی استور آپدیت میکنن. یه راهی باید باشه..
این هم گفتم که بدون ریداکس این مشکل رو نداشتم و هر چند بار که میخواستیم از یه کامپوننت توی یه صفحه استفاده میکردیم
@kamran.davar
@hesammousavi
شاید پاسخ شما همینجا باشد
@kamran.davar
@hesammousavi
@sinashahoveisi
لطف میکنید این مثال رو پیاده سازی کنید:
قایل app.js
import React from 'react';
import './App.css';
import IncreamentNumber from './components/increament'
class App extends React.Component {
render() {
return (
<div className="App">
<IncreamentNumber />
<IncreamentNumber />
<IncreamentNumber />
</div>
);
}
}
export default App;
فایل Increament.jsx
import React from 'react';
import { connect } from 'react-redux';
import { Increament } from '../action';
const IncreamentNumber = props => {
const increaseNumber = () => {
props.dispatch(Increament(props.increament + 1))
console.log(props.increament)
}
return (
<React.Fragment>
<div style={{ display: 'flex', marginTop: 20, marginLeft: 20 }}>
<div style={{ marginRight: 10 }} >
<span>{props.increament}</span>
</div>
<div>
<button className="btn-btn-primary" onClick={increaseNumber} >Increament</button>
</div>
</div>
</React.Fragment>
)
};
const mapStateToProps = state => {
return {
increament: state.increament.increament,
}
}
export default connect(mapStateToProps)(IncreamentNumber);
فایل index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import { Provider } from 'react-redux';
import { createStore } from 'redux';
import reducers from "./reducer";
const store = createStore(reducers);
ReactDOM.render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>,
document.getElementById('root')
);
serviceWorker.unregister();
export default store;
فایل index.js برای action
export const Increament = increament => {
return {
type: "Increament",
increament
}
}
فایل reducer :
const defaultState = {
increament: 0,
}
export const increament = (state = defaultState, action) => {
switch (action.type) {
case "Increament":
return { ...state, increament: action.increament }
default:
return state;
}
}
فایل index for reducer :
import {combineReducers} from 'redux';
import {increament} from './increament';
export default combineReducers({
increament,
})
npm i redux react-redux
هم نصب بشه
@kamran.davar
@hesammousavi
@sinashahoveisi
من میخوام کامپوننت اینکریمنت رو هر چند بار که میخوام استفاده کنم و مقدار هر کامپوننت با تغییر یکی دیگه از کامپوننت ها تغییر نکنه.. ممنون میشم کمکم کنید.