Привет, я пытаюсь получить панель навигации с 5 компонентами, где я могу выбрать панель навигации и добавить робота. Функция Add работает хорошо с действиями и redurs.My проблема, когда я пытаюсь добавить роботов в AddRobot, список не показывает недавно добавленных роботов, даже если я добавляю новых роботов в моем компоненте AddRobot. Мой список карт отключен от моих компонентов AddRobot, это не меняет список карт? Как я могу сделать файл Cardlist. js и AddRobo. js в одном и том же списке роботов, который я объявил в состояниях данных в редукторах. js?
Ниже приведен мой индекс. js
import React from 'react';
import ReactDOM from 'react-dom';
import {
createStore,
combineReducers,
applyMiddleware
} from 'redux';
import {
Provider
} from 'react-redux';
import thunkMiddleware from 'redux-thunk';
import {
createLogger
} from 'redux-logger';
import 'tachyons';
import App from './containers/App';
import registerServiceWorker from './registerServiceWorker';
import {
manage_data
} from './reducers'
import './index.css';
const logger = createLogger()
const rootReducers = combineReducers({
manage_data
})
const store = createStore(rootReducers, applyMiddleware(thunkMiddleware, logger))
ReactDOM.render( <
Provider store = {
store
} >
<
App / >
<
/Provider>,
document.getElementById('root')
);
registerServiceWorker();
Ниже мое приложение. js
import React, { Component } from 'react';
import {Link,Route,Switch} from 'react-router-dom';
import { BrowserRouter as Router } from 'react-router-dom';
import {connect} from 'react-redux';
import { setSearchField, requestRobots} from '../actions';
import CardList from '../components/CardList';
import {useSelector,useDispatch} from 'react-redux';
import SearchBox from '../components/SearchBox';
import Scroll from '../components/Scroll';
import ErrorBoundry from '../components/ErrorBoundry';
import Home from '../components/Home';
import AddRobot from '../components/AddRobot';
import UppdateRobot from '../components/UpdateRobot';
import DeleteRobot from '../components/DeleteRobot';
import './App.css';
function App() {
const routes = [{
id: 1,
path:'/about',
component:Home
},
{
id: 2,
path:'/addRobo',
component:AddRobot
},
{
id: 3,
path:'/updateRobo',
component:UppdateRobot
},
{
id: 4,
path:'/searchRobo',
component: SearchBox
},
{
id: 5,
path:'/delRobo',
component: DeleteRobot
}
];
const stylecur = {fill:'currentcolor'};
const robotsTest = useSelector(state => state.manage_data.robots)
return (
<Router>
<div className='tc'>
<header className="bg-white black-80 tc pv4 avenir">
<a href="/" className="bg-black-80 ba b--black dib pa3 w2 h2 br-100">
<svg className="white" data-icon="skull" viewBox="0 0 32 32" style={stylecur}>
<title>skull icon</title><path d="M16 0 C6 0 2 4 2 14 L2 22 L6 24 L6 30 L26 30 L26 24 L30 22 L30 14 C30 4 26 0 16 0 M9 12 A4.5 4.5 0 0 1 9 21 A4.5 4.5 0 0 1 9 12 M23 12 A4.5 4.5 0 0 1 23 21 A4.5 4.5 0 0 1 23 12"></path></svg>
</a>
<h1 className="mt2 mb0 baskerville i fw1 f1">RoboFriends</h1>
<h2 className="mt2 mb0 f6 fw4 ttu tracked">Create an ensembe of Robot with your friends!</h2>
<nav className="bt bb tc mw7 center mt4" >
<Link to={'/about'} className="f6 f5-l link bg-animate black-80 hover-bg-light-green dib pa3 ph4-l">About This Page</Link>
<Link to={'/addRobo'} className="nav-link f6 f5-l link bg-animate black-80 hover-bg-light-green dib pa3 ph4-l">Add Robot</Link>
<Link to={'/updateRobo'} className="nav-link f6 f5-l link bg-animate black-80 hover-bg-light-green dib pa3 ph4-l">Update Robot</Link>
<Link to={'/searchRobo'} className="nav-link f6 f5-l link bg-animate black-80 hover-bg-light-green dib pa3 ph4-l">Search Robot</Link>
<Link to={'/delRobo'} className="nav-link f6 f5-l link bg-animate black-80 hover-bg-light-green dib pa3 ph4-l">Delete Robot</Link>
</nav>
</header>
<Switch>
{routes.map(({id, path, component: Component }) => (
<Route
key={id}
path={path}
component={Component} // sans the angle brackets </>
/>))
}
</Switch>
<Scroll>{
<ErrorBoundry>
<CardList robots={robotsTest} />
</ErrorBoundry>
}
</Scroll>
</div>
</Router>
);
}
export default App;
Ниже мой AddRobot. js
import React from 'react';
import {
useSelector,
useDispatch
} from 'react-redux';
import {
CHANGE_NAME,
CHANGE_USERNAME,
CHANGE_EMAIL,
ADD_ROBOT
} from '../constants';
const AddRobot = () => {
const emailInput = React.useRef();
const nameInput = React.useRef();
const userInput = React.useRef();
const disPatch = useDispatch();
const handleName = e => disPatch({
type: CHANGE_NAME,
payload: e.target.value
});
const handleUser = e => disPatch({
type: CHANGE_USERNAME,
payload: e.target.value
});
const handleEmail = e => disPatch({
type: CHANGE_EMAIL,
payload: e.target.value
});
const sendAdd = () => disPatch({
type: ADD_ROBOT
});
const clearInputs = () => {
emailInput.current.value = "";
nameInput.current.value = "";
userInput.current.value = "";
};
const name = useSelector(state => state.name)
const username = useSelector(state => state.username)
const email = useSelector(state => state.email)
const handleAdd = e => {
sendAdd();
e.preventDefault();
}
return ( <
div >
<
h1 > Add Robot By Name < /h1>
<
input className = 'pa2 ba b--green bg-lightest-blue'
name = "fullname"
placeholder = 'Add Name'
value = {
name
}
onChange = {
handleName
}
ref = {
nameInput
}
/>
<
input className = 'pa2 ba b--green bg-lightest-blue'
name = "username"
placeholder = 'Add Username'
value = {
username
}
onChange = {
handleUser
}
ref = {
userInput
}
/>
<
input className = 'pa2 ba b--green bg-lightest-blue'
name = "email"
placeholder = 'Add Email'
value = {
email
}
onChange = {
handleEmail
}
ref = {
emailInput
}
/>
<
a className = "f50 link dim ph3 pv2 mb2 dib white bg-dark-green ma2"
href = "addRobo"
onClick = {
handleAdd
} >
Add Robot <
/a>
<
a className = "f50 link dim ph3 pv2 mb2 dib white bg-dark-green ma1"
href = "#0"
onClick = {
clearInputs
} >
Reset Inputs <
/a>
<
/div>
);
}
export default AddRobot;
Ниже мой CardList. js
import React from 'react';
import Card from './Card';
const CardList = ({
robots
}) => {
if (robots !== undefined) {
return ( <
div > {
robots.map((user, i) => {
return ( <
Card key = {
i
}
id = {
robots[i].id
}
name = {
robots[i].name
}
email = {
robots[i].email
}
/>
);
})
} <
/div>
);
} else {
return <h1 > Error < /h1>
}
}
export default CardList;
Ниже мои редукторы. js file.
import {
CHANGE_SEARCHFIELD,
CHANGE_NAME,
CHANGE_USERNAME,
CHANGE_EMAIL,
ADD_ROBOT,
UPDATE_ROBOT,
DELETE_ROBOT,
REQUEST_ROBOTS_PENDING,
REQUEST_ROBOTS_SUCCESS,
REQUEST_ROBOTS_FAILED
} from './constants';
const data = {
robots: [{
id: 1,
name: 'John Doe',
username: 'JD',
email: 'john_doe@gmail.com',
}],
id: '',
name: '',
username: '',
email: '',
isPending: true,
searchField: ''
}
function clear_field(user) {
user.name = '';
user.username = '';
user.email = '';
}
function addNewRobot(obj, list) {
var new_robot = {};
new_robot.id = obj.robots.length + 1;
new_robot.name = obj.name;
new_robot.username = obj.userName;
new_robot.email = obj.email;
list.push(new_robot);
return list;
}
export const manage_data = (state = data, action = {}) => {
switch (action.type) {
case ADD_ROBOT:
var new_list = addNewRobot(state, state.robots);
state.robots = new_list;
clear_field(state);
return Object.assign({}, state, {
robots: new_list
});
case UPDATE_ROBOT:
console.log("Hello Update!");
return state;
case DELETE_ROBOT:
return state;
case CHANGE_NAME:
return Object.assign({}, state, {
name: action.payload
})
case CHANGE_USERNAME:
return Object.assign({}, state, {
userName: action.payload
})
case CHANGE_EMAIL:
return Object.assign({}, state, {
email: action.payload
})
case REQUEST_ROBOTS_PENDING:
return Object.assign({}, state, {
isPending: true
})
case REQUEST_ROBOTS_SUCCESS:
return Object.assign({}, state, {
robots: action.payload,
isPending: false
})
case REQUEST_ROBOTS_FAILED:
return Object.assign({}, state, {
error: action.payload
})
case CHANGE_SEARCHFIELD:
return Object.assign({}, state, {
searchField: action.payload
})
default:
return state;
}
}