Cześć, ostatnio zacząłęm swoją przygodę z reactem. Moim pierwszym projektem jest aplikacja typu "todo". Użytkownik wprowadza co ma zrobić, naciska "dodaj" i notatka zostaje wyświetlona niżej. Chciałbym tym notatką nadać jakiś ciekawy kolor, no i z pomocą przyszedł mi "BlockPicker". Poniżej przedstawiam wam 2 pliki, z którymi nie mogę się uporać.
Form.js:
import React, { useState } from 'react';
import { BlockPicker } from 'react-color';
import Tippy from 'tippy.js'
const Form = ({ setInputText,todos, setTodos, inputText, setStatus}) => {
const [selectedColor, setSelectedColor] = useState('#ffffff')
function inputTextHandler(e) {
setInputText(e.target.value);
}
const submitTodoHandler = (e) => {
e.preventDefault();
setTodos([
...todos,{text: inputText, completed: false, id: Math.random() * 1000}
]);
setInputText('');
};
const statusHandler = (e) => {
setStatus(e.target.value )
}
const colorHandler = (e) => {
e.preventDefault();
}
return(
<form>
<BlockPicker
color={selectedColor}
onChangeComplete={color => setSelectedColor(color.hex)}
/>
<button onClick={colorHandler} className='color-picker'>
C
</button>
<input
value={inputText}
onChange = {inputTextHandler}
type="text"
className="todo-input" />
<button onClick = {submitTodoHandler} className="todo-button" type="submit">
<i className="fas fa-plus-circle"></i>
</button>
<div className="select">
<select onChange={statusHandler} name="todos" className="filter-todo">
<option value="all">All</option>
<option value="completed">Completed</option>
<option value="uncompleted">Uncompleted</option>
</select>
</div>
</form>
)
}
export default Form;
Todo.js:
import React from 'react';
import Form from './Form'
const Todo = ({ text,todo,todos,setTodos, selectedColor }) => {
const deleteHandler = () => {
setTodos(todos.filter(el => el.id !== todo.id))
}
const completeHandler = () => {
setTodos(todos.map((item) => {
if(item.id === todo.id){
return{
...item, completed: !item.completed
};
}
return item;
})
);
};
return(
<div className='todo' style={{backgroundColor: selectedColor}}>
<li className={`todo-item ${todo.completed ? "completed" : ''}`}>{text}</li>
<button onClick={completeHandler} className='complete-btn'>
<i className='fas fa-check'></i>
</button>
<button onClick={deleteHandler} className='trash-btn'>
<i className='fas fa-trash'></i>
</button>
</div>
);
}
export default Todo;
Jak możecie zauważyć w pliku Form.js mam "selectedColor". Chciałbym móc jakoś tego użyć do ustawienia koloru aktualnie dodawanej notatki. Po użyciu console.log(selectedColor) w Form.js dostaje odpowiedź z kodem hex wybranego koloru, a w pliku Todo.js zawsze wyświetla się "undefined". Byłby ktoś w stanie pomóc zrobić to w ten sposób, aby po wybraniu danego koloru, kolor notatki zmieniał się właśnie na ten na stałe?