【发布时间】:2021-01-05 10:19:50
【问题描述】:
我试图将它作为 id 作为道具传递给另一个不是该组件的子组件的组件。我正在考虑使用上下文,但我想知道是否有另一种方法,因为我对反应很陌生,我正在寻找一种更有效的方法。
这是生成被点击元素 id 的组件。当我记录它时,数据是正确的,没有通知任何问题。我首先尝试将它作为道具传递,如下所示,但由于我不希望在该页面上看到它,我没有将它传递给主 return 语句,我也没有在其中调用该方法,但随后它返回 undefined in我想使用它的组件
import React, { useState } from 'react'
import { useHistory } from 'react-router-dom';
import Workspacelist from '../Workspace/Workspacelist';
function BoardList({ boards }) {
const [currentid, setcurrentid] = useState('')
const history = useHistory()
const navigate = (id) => {
setcurrentid(id);
console.log(id)
history.push(`/workspace/${id}`)
return(
<Workspacelist id = {id}/>
)
}
return (
<>
{
boards.map((board) => (
<li key={board.id} className="boardlist" style={styles} onClick={() => navigate(board.id)}>
<h3>{board.title}</h3>
</li>
))}
</>
)
}
export default BoardList
PS:Firebase 正在被纳入这个项目,我想这可能是我第一次使用 firebase 的原因,所以我可能遗漏了一些东西,因为所有数据都来自服务器
这是我想要传递给它的组件
import React, { useState, useEffect } from 'react'
import Firebase, { db } from '../Firebase/Firebase';
import { Todo } from './List';
function Workspacelist({ id }) {
const [updatedId] = useState(id)
const [show, setshow] = useState(false);
const [Todos, setTodos] = useState([]);//Todolist
const [ToDo, setToDo] = useState('');
useEffect(() => {
const docRef = db.collection("boards").doc(updatedId).get().then(doc => {
if (doc.exists) {
setTodos(doc.data().todo);
console.log("Document data:", doc.data().todo);
} else {
console.log("No such document!");
}
}).catch(function (error) {
console.log("Error getting document:", error);
});
return docRef
})
return (
<div className="workspacelist">
<div className="todo">
<div>
<b>To Do</b>
<b>...</b>
<Todo Todos={Todos} />
<span onClick={() => { setshow(current => !current) }} style={{ display: show ? 'none' : 'block' }}>+ Add a card</span>
</div>
<div className="add" style={{ display: show ? 'block' : 'none' }}>
<textarea placeholder="Enter a title for this card..." value={ToDo} onChange={(e) => { setToDo(e.target.value) }} />
<button className="addcard" onClick={one}>Add Card</button>
<button onClick={() => { setshow(current => !current) }}>X</button>
<button className="more">...</button>
</div>
</div>
</div>
)
}
export default Workspacelist
提前谢谢你的帮助,即使我必须重写它,只要告诉我,如果你在我的鞋子里,你会怎么做
【问题讨论】:
标签: javascript reactjs firebase react-props