【发布时间】:2020-06-06 23:22:55
【问题描述】:
我目前在一个用 ReactJS 完成的项目中使用CanvasJS for pie charts。完成对特定人员的搜索后,我会渲染 4 个显示信息的饼图。我想使用 Flexbox 在多行上并排呈现饼图(在空间允许的情况下)。
目前,当饼图呈现时,每个 CanvasJSChart 占据了行的整个宽度。在下图中,您可以看到虽然每个饼图都占据了大约 1/3 的表格(“试用版”和“Canvasjs.com”相对于饼图位置不固定,可以更靠近它,取决于容器的大小),容器是行的宽度。理想情况下,我希望每行包含 2 个饼图(但不固定以允许应用程序在小屏幕上更好地工作)。
这是我的 CSS 部分。
.container {
display:flex;
flex-wrap: row wrap;
}
当我没有flex-wrap: row wrap; 行时,图表将单独占用更少的空间,并且都保持在同一行:
所以当我尝试让图表环绕时,我不确定为什么容器的大小会变为整行。下面是我呈现图表的代码(在我搜索名称时在名为 Accuracy 的组件中:
class Contestant extends Component{
constructor(props){
super(props)
}
render(){
var name = this.props.data[0];
var data = this.props.data[1];
let fjText = null
let fj = null
if (data.FJCorrect+data.FJIncorrect>0){
fj = <Accuracy numberCorrect={data.FJCorrect} numberIncorrect={data.FJIncorrect}
overallAccuracy = {data.FJAccuracy}/>
}
let tiebreak = null
let tiebreakText = null
if (data.TiebreakCorrect+data.TiebreakIncorrect>0){
tiebreak = <Accuracy numberCorrect={data.TiebreakCorrect}
numberIncorrect={data.TiebreakIncorrect}overallAccuracy = {data.TiebreakAccuracy} />
}
return(
<div className = "container" >
<Accuracy numberCorrect={data.numberCorrect} numberIncorrect={data.numberIncorrect}
overallAccuracy = {data.overallAccuracy}/>
<Accuracy numberCorrect={data.JCorrect} numberIncorrect={data.JIncorrect}
overallAccuracy = {data.JAccuracy}/>
<Accuracy numberCorrect={data.DJCorrect} numberIncorrect={data.DJIncorrect}
overallAccuracy = {data.DJAccuracy}/>
{fj}
{tiebreak}
</div>
)
}
}
export default Contestant
下面是我呈现Contestant 组件的代码:
class Search extends Component{
constructor(){
super()
this.state = {search: "",
isLoading: true,
result: "",
searchType: null
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
this.handleSearch = this.handleSearch.bind(this);
}
handleSearch(searchStr){
//Takes in text and finds data of corresponding person
}
handleChange(event){
//In case someone is searching for a new term, we have to reset search query type
if (this.state.searchType !== null){
this.setState({isLoading: true})
}
this.setState({search: event.target.value});
}
handleSubmit() {
this.setState({isLoading: false, result: this.handleSearch(this.state.search)})
}
render(){
return(
<div>
<input type="text" value={this.state.search} onChange={this.handleChange} placeholder={...} />
<button type="submit" onClick={this.handleSubmit}>Search</button>
{this.state.result.length === 0 ? null: <Contestant data={this.state.result}/>}
</div>
)
}
}
export default Search
我的 CanvasJS 饼图具有链接网站上的默认设置(仅更改了数据点),所以我不确定为什么图表的大小会根据我是否包装 Flexbox 单元格而改变。
class Accuracy extends Component{
constructor(props){
super(props)
}
render(){
var correctAccuracy = ((this.props.overallAccuracy).toFixed(2)).toString()
var incorrectAccuracy = ((100-this.props.overallAccuracy).toFixed(2)).toString()
var options = {
animationEnabled: false,
animationEnabled: true,
animationDuration: 500,
backgroundColor: "#F0F8FF",
height: 260,
data: [{
type: "pie",
startAngle: 300,
toolTipContent: "{accuracy}%",
indexLabelFontSize: 16,
indexLabel: "{label}:{y}",
dataPoints: [
{ y: this.props.numberCorrect, label: "Correct", accuracy: correctAccuracy },
{ y: this.props.numberIncorrect, label: "Incorrect", accuracy: incorrectAccuracy},
]
}]
}
return (
<CanvasJSChart options = {options}/>
)
}
}
export default Accuracy
任何帮助将不胜感激!这几天我一直卡在这个问题上
【问题讨论】:
标签: css reactjs flexbox canvasjs